Jochen Eddelbuettel created GROOVY-9554:
-------------------------------------------

             Summary: @Field variable access within closures broken
                 Key: GROOVY-9554
                 URL: https://issues.apache.org/jira/browse/GROOVY-9554
             Project: Groovy
          Issue Type: Bug
          Components: Compiler
    Affects Versions: 3.0.3, 2.4.15
            Reporter: Jochen Eddelbuettel


 
{code:java}
@groovy.transform.Field String abc
binding.variables.clear()
abc = "abc"
println binding.hasVariable("abc")
["D","E","F"].each { abc += it }
println binding.getVariable("abc")
assert abc == "abcDEF"
{code}
If a variable is declared using the @Field annotation, it can be assigned to in 
the main script body, but any assignment inside a closure (here the closure 
used with each) ends up in the script binding instead. Assignments within 
regular methods work fine, too. If the variables is accessed inside the closure 
and it is not in the binding, then the value will come from the field. As soon 
as it is in the binding, the binding variable takes precedence over the field. 
In both cases the field declared with @Field needs to have precedence over 
anything that is in the binding, just like local variables do.

  

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to