2016-06-16 23 views
0

groovyで変数名を別の変数で渡す場所を定義します。Groovy - 変数名が別の変数によって渡される変数を定義します。

何かが好きです。

def runExtFunc(varName){ 
    def varName // => def abc 
    varName = load 'someFile.groovy' // abc = load 'someFile.groovy' 

    varName."$varName"() // -> abc.abc() (run function defined in File) 
} 

    [...] 
runExtFunc('abc') // -> abc.abc() (Function abc defined in File) 
    [...] 
runExtFunc('xyz') // -> xyz.xyz() (Function xyz defined in File) 
    [...] 

悲しいことに、def varNameは変数varNameを定義し、abcは定義しません。 runExtFuncを2回呼び出すと、varNameがすでに定義されているためにエラーが発生する可能性があります。

また、私はどちらか動作しません

def runExtFunc(varName){ 
    def "${varName}" // => def abc 
     [...] 
    "${varName}" = load 'someFile.groovy' 
     [...] 
} 

を試してみました。

提案がありますか?

+0

はあなたがこれをしたい理由の例を与えることができますか?あなたの最初のコードは 'varName'だけで動作するはずです。なぜローカルスコープの変数に名前を付けるのかわかりません。 –

+0

このリンクを参照してください。http://stackoverflow.com/questions/6729605/assigning-variables-with-dynamic-names-in-java –

答えて

0

(私が正しくあなたを理解している場合)、これを試してみてください:

def dummyFunc(varName) { 
    new GroovyShell(this.binding).evaluate("${varName}") 
} 

dummyFunc('abc') 

abc = "Hello there" 
println abc 

プリント

Hello there 
1

これは間違ったアプローチです。通常はリストまたはのデータ構造を設定します。コレクションを保存し、コレクション内の特定の要素にアクセスできるようにします。

リストは、特定の値(一意または一意でない)を保持できます。 セットでは、特定の値(すべて一意)を保持できます。 地図では、Key, Valueのペア(キーは一意である必要があります)を使用できます。

もっと読むここ groovy listgroovy map

関連する問題