Как интерполировать строку в Groovy? - PullRequest
1 голос
/ 14 октября 2019

У меня есть несколько переменных типов списков. У меня есть другая переменная типа списка, которая содержит имя всех переменных в качестве значений.

def A = ['abc','def','ghi']
def B = ['123','456','789']
def C = ['ABC','DEF','GHI']

def masterList = ['A','B','C']

masterList.each {

    println "${${it}}"

}

Я хочу выводить как

'abc', 'def', 'ghi'

'123', '456', '789'

'ABC', 'DEF', 'GHI'

Ответы [ 4 ]

1 голос
/ 14 октября 2019

если это сценарий, то это будет работать:

A = ['abc','def','ghi']
B = ['123','456','789']
C = ['ABC','DEF','GHI']

def masterList = ['A','B','C']

masterList.each {
    println this."$it"
}

обратите внимание, что перед A,B,C

нет def
1 голос
/ 14 октября 2019

Вы не можете динамически ссылаться на эти переменные, если они имеют локальную область действия.

Решение 1: используйте карту для своих списков:

def map = ['A': ['abc','def','ghi'],
           'B': ['123','456','789']
           'C': ['ABC','DEF','GHI']]

И затем

masterList.each {println map[it]}

Решение 2. Создайте A, B и C переменных экземпляра текущего класса (если они еще не созданы), после чего вы можете динамически читать эти свойства, используя скобочную запись:

masterList.each {println this[it]}
0 голосов
/ 14 октября 2019

Хотя это будет зависеть от вашего варианта использования, следующее прекрасно работает ... пока ваши переменные являются переменными уровня класса ...

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

Результаты:

A = [abc, def, ghi]
B = [123, 456, 789]
C = [ABC, DEF, GHI]
0 голосов
/ 14 октября 2019

Если бы это было в class:

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]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...