[
https://issues.apache.org/jira/browse/GROOVY-9554?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17141053#comment-17141053
]
Jochen Eddelbuettel commented on GROOVY-9554:
---------------------------------------------
Wow, Eric, that pull request looks like your taking this bull by the horns.
I'll keep watching how this evolves and be playing with your other advice for
the time being.
> @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: 2.4.15, 3.0.3
> Reporter: Jochen Eddelbuettel
> Assignee: Eric Milles
> Priority: Major
> Time Spent: 20m
> Remaining Estimate: 0h
>
>
> {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)