1
votes

Comment interpoler une chaîne dans Groovy?

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'


0 commentaires

4 Réponses :


1
votes

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']]


0 commentaires

0
votes

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


0 commentaires

2
votes

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 >


0 commentaires

0
votes

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


0 commentaires