【问题标题】:How to use local scope variables in Groovy Script Engine?如何在 Groovy 脚本引擎中使用局部范围变量?
【发布时间】:2012-03-22 07:05:47
【问题描述】:

在我在 groovy 脚本引擎上运行的 groovy 脚本中,所有变量似乎都是全局的。我制作了一些 groovy 类,但是当我制作变量时,可以从任何地方访问它们。例如。

class test{
  void func1{ a=4 }
  void func2{ print(a) }
}

当我从 scala 调用此类函数 func1 然后调用 func2 时,结果为“4”。奇怪的是,如果我在函数中声明像“def a=0”这样的变量,变量的范围将在函数中受到限制。

我正在像这样从 GroovyScriptEngine 加载我的 groovy 脚本(使用 scala)

var gse = new GroovyScriptEngine(pathList.toArray)  
var scriptClass = gse.loadScriptByName(file.getName())
var i = scriptClass.newInstance().asInstanceOf[GroovyObject] 

然后使用invokeMethod 调用groove 脚本类中的函数。无论如何,默认情况下是否有限制变量范围的函数?

【问题讨论】:

    标签: variables groovy scope global local


    【解决方案1】:

    这是Scoping and the Semantics of "def" 中描述的预期行为。

    在 Groovy 脚本中使用未声明的变量会创建绑定变量。绑定变量对您的脚本来说是全局的。如果你用def 声明你的变量,它就变成了本地函数。

    此行为仅适用于您将代码作为脚本加载。我不相信它可以改变它。只需在需要局部变量时使用声明(def 或类型)即可。

    请注意,您还可以使用@Field 注解定义绑定变量(全局):

    class test {
      void func1{ @Field int a=4 }
      void func2{ print(a) }
    }
    

    等价于

    class test {
      void func1{ a=4 }
      void func2{ print(a) }
    }
    

    【讨论】:

    • 谢谢你打扰我
    猜你喜欢
    • 2013-11-06
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2014-03-02
    • 2021-10-06
    相关资源
    最近更新 更多