[ 
https://issues.apache.org/jira/browse/GROOVY-9554?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17135266#comment-17135266
 ] 

Eric Milles commented on GROOVY-9554:
-------------------------------------

A bit of info that may help you right away: {{@Field}} does generate a public 
setter for non-final fields.  So you can call "setAbc(...)" within your 
closure.  You could also use "this.@abc" in your closure to target the 
"attribute", which often resolves to a field.

Also, if the PR is accepted and you want to bypass a script field and read or 
write from binding, you can add the "binding." qualifier to any variable.

> @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: 10m
>  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)

Reply via email to