这有效:

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

这不起作用:
def myClosure = { println 'Hello world!' }
String test = 'myClosure'
test()

为什么,有办法做到吗?

最佳答案


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' )
  }
}

09-30 14:31