J'ai plusieurs variables de types de liste. J'ai une autre variable de type liste qui contient le nom de toutes les variables sous forme de valeurs.
def A = ['abc','def','ghi'] def B = ['123','456','789'] def C = ['ABC','DEF','GHI'] def masterList = ['A','B','C'] masterList.each { println "${${it}}" }
Je veux une sortie comme
'abc', 'def', 'ghi' p>
'123', '456', '789'
'ABC', 'DEF', 'GHI'
4 Réponses :
Vous ne pouvez pas référencer dynamiquement ces variables, si elles sont de portée locale.
Solution 1: utilisez une carte pour vos listes:
masterList.each {println this[it]}
Et puis
masterList.each {println map[it]}
Solution 2: créez les variables d'instance A
, B
et C
du classe actuelle (si elles ne le sont pas déjà), après quoi vous pouvez lire ces propriétés dynamiquement en utilisant la notation entre crochets:
def map = ['A': ['abc','def','ghi'], 'B': ['123','456','789'] 'C': ['ABC','DEF','GHI']]
Si ce serait dans une classe
:
class Foo { def A = ['abc','def','ghi'] def B = ['123','456','789'] def C = ['ABC','DEF','GHI'] } Foo foo = new Foo() def masterList = ['A','B','C'] masterList.each { println foo[it] }
s'il s'agit d'un script, cela fonctionnera:
A = ['abc','def','ghi'] B = ['123','456','789'] C = ['ABC','DEF','GHI'] def masterList = ['A','B','C'] masterList.each { println this."$it" }
notez qu'il n'y a pas de def
devant A, B, C code >
Bien que cela dépende de votre cas d'utilisation, ce qui suit fonctionne très bien ... tant que vos variables sont des variables de niveau classe ...
A = [abc, def, ghi] B = [123, 456, 789] C = [ABC, DEF, GHI]
Résultats:
class MyClass { def A = ['abc','def','ghi'] def B = ['123','456','789'] def C = ['ABC','DEF','GHI'] def test(String role, String group) { def masterList = ['A','B','C'] masterList.each { it -> println(" ${it} = ${this[it]}") } } }