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

編集 -- run クロージャの例を含むクラス

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 に答える