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]}")
}
}
}