[ https://issues.apache.org/jira/browse/GROOVY-11525?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17904203#comment-17904203 ]
Eric Milles commented on GROOVY-11525: -------------------------------------- I understood the scope of the variables to be the containing parentheses. So in your example, "(int b=a; int c=b+1)" "b" and "c" are not available outside these parens. Same for "(int d=2)" and "(int e=...))". So, "(int e=a+b+c+d)" would emit errors for "b", "c" and "d" being unknown. I'm further assuming that only variable declarations are possible in the leading position. "return (int b=2; a+b)" not "return ((int b =2; int c = 3); a+b+c)". What goes in a traditional for loop init section is probably the closest parallel I can think of. > 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)