groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jochen Theodorou (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GROOVY-8221) Not being able to refer to global variables via scripted methods
Date Wed, 07 Jun 2017 22:27:18 GMT

    [ 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)

Mime
View raw message