[ https://issues.apache.org/jira/browse/GROOVY-11525?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17904206#comment-17904206 ]
Eric Milles edited comment on GROOVY-11525 at 12/9/24 4:09 PM: --------------------------------------------------------------- Instead of "(int b; char c; ...)" you could allow only one DeclarationExpression which could be like "int b" or "def (int b, char c)". I do get that this sort of thing can be a bit clunky at times (especially within conditionals): {code:groovy} int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); } {code} But I'm not seeing a lot of value here when blocks, closures and functions can be used to create scopes to control the propagation of names. was (Author: emilles): Instead of "(int b; char c; ...)" you could allow only one DeclarationExpression which could be like "int b" or "def (int b, char c)". I do get that this sort of thing can be a bit clunky: {code:groovy} int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); } {code} But I'm not seeing a lot of value here when blocks, closures and functions can be used to create scopes to control the propagation of names. > Support expression scope variable > --------------------------------- > > Key: GROOVY-11525 > URL: https://issues.apache.org/jira/browse/GROOVY-11525 > Project: Groovy > Issue Type: New Feature > Reporter: Daniel Sun > Priority: Major > > Let's take a look at the following code first: > {code} > int hash(Object key) { > int h; > return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); > } > {code} > variable {{h}} is actually an expression scope variable, but current syntax > doesn't support. > I propose an expression scope variable syntax, e.g. > Proposed syntax 1: > {code} > // Just support declaring variables of same type > (int h, x, y; ...) > {code} > {code} > int hash(Object key) { > // h is only visible in the expression > return (int h; (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)) > } > {code} > We can reduce the scope of {{h}} further: > {code} > int hash(Object key) { > // h is only visible in the expression > return (key == null) ? 0 : (int h; (h = key.hashCode()) ^ (h >>> 16)) > } > {code} > Proposed syntax 2(I prefer the syntax): > {code} > // Support declaring variables of different types > (int h, X x, Y y -> ...) > {code} > {code} > int hash(Object key) { > // h is only visible in the expression > return (int h -> (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)) > } > {code} > {code} > int hash(Object key) { > // h is only visible in the expression > return (key == null) ? 0 : (int h -> (h = key.hashCode()) ^ (h >>> 16)) > } > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)