Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-365

variables created within the closure fail to be visible outside as local variables

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Cannot Reproduce
    • 1.0-beta-4
    • 1.0-JSR-4
    • None
    • None
    • Windows XP Professional

    Description

      The following code from the User Guide should work:

      count = 0
      [1, 2, 3, 4].each

      { count += it; last = it }
      println("the sum is ${count} and the last item was ${last}")


      but gives:

      []
      []
      Caught: java.lang.NullPointerException
      java.lang.NullPointerException
      at test$1.doCall(test.groovy:2)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
      java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
      sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.codehaus.groovy.runtime.ReflectionMetaMethod.invoke(ReflectionMet
      aMethod.java:56)
      at groovy.lang.Closure.call(Closure.java:195)
      at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMe
      thods.java:283)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
      java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
      sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.codehaus.groovy.runtime.ReflectionMetaMethod.invoke(ReflectionMet
      aMethod.java:56)
      at org.codehaus.groovy.runtime.NewStaticMetaMethod.invoke(NewStaticMetaM
      ethod.java:100)
      at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:846)
      at groovy.lang.MetaClass.invokeMethod(MetaClass.java:268)
      at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:130)
      at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.
      java:101)
      at test.run(test.groovy:2)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
      java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
      sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.codehaus.groovy.runtime.ReflectionMetaMethod.invoke(ReflectionMet
      aMethod.java:56)
      at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:846)
      at groovy.lang.MetaClass.invokeMethod(MetaClass.java:268)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
      java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
      sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.codehaus.groovy.runtime.ReflectionMetaMethod.invoke(ReflectionMet
      aMethod.java:56)
      at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:846)
      at groovy.lang.MetaClass.invokeMethod(MetaClass.java:268)
      at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:130)
      at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.
      java:101)
      at test.invokeMethod(test.groovy)
      at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:117)
      at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.
      java:101)
      at org.codehaus.groovy.runtime.InvokerHelper.runScript(InvokerHelper.jav
      a:332)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
      java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
      sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.codehaus.groovy.runtime.ReflectionMetaMethod.invoke(ReflectionMet
      aMethod.java:56)
      at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:846)
      at groovy.lang.MetaClass.invokeStaticMethod(MetaClass.java:329)
      at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:124)
      at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.
      java:101)
      at test.main(test.groovy)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
      java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
      sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.codehaus.groovy.runtime.ReflectionMetaMethod.invoke(ReflectionMet
      aMethod.java:56)
      at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:846)
      at groovy.lang.MetaClass.invokeStaticMethod(MetaClass.java:329)
      at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:124)
      at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.
      java:101)
      at groovy.lang.GroovyShell.run(GroovyShell.java:183)
      at groovy.lang.GroovyShell.main(GroovyShell.java:88)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
      java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
      sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.codehaus.classworlds.Launcher.launchStandard(Launcher.java:410)
      at org.codehaus.classworlds.Launcher.launch(Launcher.java:344)
      at org.codehaus.classworlds.Launcher.main(Launcher.java:474)


      If we include the initialization of 'last' everything works:

      count = 0
      last = 0
      [1, 2, 3, 4].each { count += it; last = it }


      println("the sum is ${count} and the last item was ${last}")

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              pcosta Pedro Costa
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: