3

这有效:

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

这不起作用:

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

为什么,有没有办法做到这一点?

4

1 回答 1

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' )
  }
}
于 2013-07-25T13:53:27.343 回答