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

Jochen Theodorou commented on GROOVY-8221:
------------------------------------------

All code that is not written in a class in a script will be executed in the 
context of the script class. This script class allows access to the binding for 
unresolved variables. If you define a class like Test in the example, it has by 
default no access to the binding. If a super class (or trait) is ok for you, it 
is very easy to add this connection and let Test use the binding as well. That 
involves  of course giving the binding as constructor parameter. I could also 
imagine a version with @Delegate. Let me know if these kind of solutions are 
good for, then I will provide examples

> Not being able to refer to global variables via scripted methods
> ----------------------------------------------------------------
>
>                 Key: GROOVY-8221
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8221
>             Project: Groovy
>          Issue Type: Bug
>          Components: GroovyScriptEngine
>    Affects Versions: 2.4.11
>         Environment: Probably not relevant, but problem at least confirmed on 
> Mac OS X
>            Reporter: David Ekholm
>
> We wish to switch from BeanShell to Groovy as script language (JSR-223) in 
> our desktop software jAlbum. jAlbum injects a set of global variables into 
> the scriptlets via the Bindings object of the JSR-223 API. These variables 
> are directly accessible in simple scripts, but contrary to scripting in 
> BeanShell, these variables are not available to methods declared within 
> scripted classes.
> Here's what works (assuming that "foo" is passed to the GroovyScriptEngine 
> via the Bindings object):
> println(foo) // foo being made available to the magically created Script 
> class' run method
> Here's what won't work (foo again being passed to the GroovyScriptEngine via 
> the Bindings object):
> class Test {
>   void bar() {
>     println(foo); // Reference to missing variable
>   }
> }
> Test t = new Test()
> t.bar() // Fails due to missing variable



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to