Hello there,

when touching this stuff, it would be extremely desirable primarily to fix the 
scoping/obscuring of same-named variables, which Groovy at the moment does 
wrong, same as the demented Java thing:

===
89 ocs /tmp> <q.groovy
def i=0 // outer
println "i=$i (outer)"
for (int i=1 /* inner */;i<2;i++) println "i=$i (inner)"
println "i=$i (outer again)"
89 ocs /tmp> /usr/local/groovy-4.0.0-alpha-1/bin/groovy q
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/private/tmp/q.groovy: 3: The current scope already contains a variable of the 
name i
 @ line 3, column 10.
   for (int i=1 /* inner */;i<2;i++) println "i=$i (inner)"
            ^
1 error
90 ocs /tmp>
===

This is how it should work:

===
90 ocs /tmp> <q.c
#include <stdio.h>
int main() {
  int i=0;
  printf("i=%d (outer)\n",i);
  for (int i=1 /* inner */;i<2;i++) printf("i=%d (inner)\n",i);
  printf("i=%d (outer again)\n",i);
  return 0;
}
91 ocs /tmp> cc -Wall q.c && ./a.out                     
i=0 (outer)
i=1 (inner)
i=0 (outer again)
92 ocs /tmp> 
===

Thanks and all the best,
OC

> On 2 Dec 2020, at 17:34, Milles, Eric (TR Technology) 
> <eric.mil...@thomsonreuters.com> wrote:
> 
> Traditional "for" (first example) and ARM "try" (last example) support local 
> variable declarations that are scoped to the statement.  In light of the 
> upcoming "instanceof" enhancement in Java, I was thinking about possible 
> alternatives for declaring local variables that have statement scope.
>  
> for (int i = ...; ...) {
>   // i available
> }
> // i unavailable
>  
> for (x in y index i) { // from Gosu (http://gosu-lang.github.io/docs.html 
> <http://gosu-lang.github.io/docs.html>) -- an alternative to using 
> eachWithIndex
> }
>  
> if (x instanceof T t) { // from Java 14+
> }
>  
> if (def x = ...) { // tests Groovy truth in this form; may be wrapped in 
> parens to check something else about "x"
> }
>  
> try (def ac = ...) {
> }
>  
> This e-mail is for the sole use of the intended recipient and contains 
> information that may be privileged and/or confidential. If you are not an 
> intended recipient, please notify the sender by return e-mail and delete this 
> e-mail and any attachments. Certain required legal entity disclosures can be 
> accessed on our website: 
> https://www.thomsonreuters.com/en/resources/disclosures.html 
> <https://www.thomsonreuters.com/en/resources/disclosures.html>

Reply via email to