ここには、類似しているが十分に異なる他の質問がいくつかあります。これを新しい質問として提起する必要があります。
空のクラスを作成しました。それを Test と呼びましょう。プロパティやメソッドはありません。次に、キーと値のペアのマップを反復処理し、キーにちなんで名付けられた値を含むプロパティを動的に作成します...次のように:
def langMap = [:]
langMap.put("Zero",0)
langMap.put("One",1)
langMap.put("Two",2)
langMap.put("Three",3)
langMap.put("Four",4)
langMap.put("Five",5)
langMap.put("Six",6)
langMap.put("Seven",7)
langMap.put("Eight",8)
langMap.put("Nine",9)
langMap.each { key,val ->
Test.metaClass."${key}" = val
}
これで、次のように作成された新しいメソッドからこれらにアクセスできます。
Test.metaClass.twoPlusThree = { return Two + Three }
println test.twoPlusThree()
私がやりたいのは、「Two + Three」のような文字列から一連の命令を動的にロードし、その場でメソッドを作成して結果を評価し、式を含む多くの文字列に対してこのプロセスを繰り返し繰り返すことです。たまたま持っています。
質問: a) まず、これを行うためのより優れたエレガントな方法はありますか (私が提供した情報に基づいて) ? b) このパスが実行可能であると仮定すると、文字列がこのクラスのメソッド内でのみ有効な変数名を参照する場合、文字列からこのクロージャーを動的に構築する構文は何ですか?
ありがとう!