[ https://issues.apache.org/jira/browse/GROOVY-11525?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17904199#comment-17904199 ]
Jochen Theodorou commented on GROOVY-11525: ------------------------------------------- [~daniel_sun] My point with the Closure was actually that it does not have to be inefficient. This kind of Closure could be inlined at compile time. Coming back to the original idea... That means we want to allow also this? {code:Java} def foo(a) { return ((int b=a; int c=b+1);(int d=2);(int e=a+b+c+d)) } {code} Where a cannot be declared in the body of the method, because it is a parameter. The first expression list element declares b and c and returns c. The second expression list element declares d and returns d. The third element declares e and returns e. And since it is the last element, we take it to define the actual return. Or we would, since only a is visible the usage of b,c,d will fail compilation. Correct? > 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)