Groovy - 两个闭包调用的故事

时间:2013-07-25 13:48:53

标签: string groovy closures

这有效:

def myClosure = { println 'Hello world!' }
'myClosure'()

这不起作用:

def myClosure = { println 'Hello world!' }
String test = 'myClosure'
test()

为什么,有没有办法实现呢?

1 个答案:

答案 0 :(得分:3)

使用

test()

解析器会将其评估为对test闭包/方法的调用,而不首先将其作为变量进行评估(否则您无法调用任何具有相同名称变量的方法)

相反,请尝试:

myClosure = { println 'Hello world!' }
String test = 'myClosure'
"$test"()

编辑 - 类示例

class Test {
  def myClosure = { println "Hello World" }

  void run( String closureName ) {
    "$closureName"()
  }

  static main( args ) {
    new Test().run( 'myClosure' )
  }
}

编辑 - 带有运行闭包示例的类

class Test {
  def myClosure = { println "Hello World" }

  def run = { String closureName ->
    "$closureName"()
  }

  static main( args ) {
    new Test().run( 'myClosure' )
  }
}