как объединить строку и переменную в переменную в Groovy - PullRequest
0 голосов
/ 07 ноября 2019

Мне нужно объединить строку и переменную в логическую переменную в groovy. Случай такой:

У меня есть цикл, который ищет шаблон, если шаблон существует, я получаю переменную с именем cname , который содержит определенное значение.

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

Это то, что я пробовал:

boolean "trigger-${cname}" = true
boolean "trigger-"+${cname} = true

Но это не похоже на булево значение. Я хочу иметь возможность иметь N параметров (целых cname раз) со значением true. Например, если cname равно (app, test, rest, .. N), тогда все перечисленные ниже логические параметры будут true :

trigger-app
trigger-test
trigger-rest
trigger-N

1 Ответ

1 голос
/ 07 ноября 2019

Нельзя использовать заключенный в кавычки идентификатор для определения стандартной переменной. Вот часть документации по синтаксису Groovy, которая подробно объясняет это:

3. Идентификаторы

3.1. Нормальные идентификаторы

Идентификаторы начинаются с буквы, доллара или подчеркивания. Они не могут начинаться с цифры.

Буква может находиться в следующих диапазонах:

  • от 'a' до 'z' (строчная буква ascii)

  • от 'A' до 'Z' (заглавная буква ASCII)

  • от '\ u00C0' до '\ u00D6'

  • '\ u00D8' до '\ u00F6'

  • '\ u00F8' до '\ u00FF'

  • '\ u0100' до'\ uFFFE'

Тогда следующие символы могут содержать буквы и цифры.

Вот несколько примеров допустимых идентификаторов (здесь, имена переменных):

def name
def item3
def with_underscore
def $dollarStart

Но следующие недопустимые идентификаторы:

def 3tier
def a+b
def a#b

Все ключевые слова также являются допустимыми идентификаторами при указании после точки:

foo.as
foo.assert
foo.break
foo.case
foo.catch

Источник:https://groovy -lang.org / syntax.html # _normal_identifiers

Однако, когда вы определяете Map, вы можете использовать заключенные в кавычки идентификаторы для доступа к его ключу. значения.

3.2. Идентификаторы в кавычках

Идентификаторы в кавычках появляются после точки в точечном выражении. Например, часть имени выражения person.name может быть заключена в кавычки person."name" или person.'name'. Это особенно интересно, когда некоторые идентификаторы содержат недопустимые символы, которые запрещены спецификацией языка Java, но разрешены Groovy при цитировании. Например, такие символы, как тире, пробел, восклицательный знак и т. Д.

def map = [:]

map."an identifier with a space and double quotes" = "ALLOWED"
map.'with-dash-signs-and-single-quotes' = "ALLOWED"

assert map."an identifier with a space and double quotes" == "ALLOWED"
assert map.'with-dash-signs-and-single-quotes' == "ALLOWED"

Как мы увидим в следующем разделе о строках, Groovy предоставляет разные строковые литералы. Любые строки на самом деле разрешены после точки:

map.'single quote'
map."double quote"
map.'''triple single quote'''
map."""triple double quote"""
map./slashy string/
map.$/dollar slashy string/$

Существует разница между строками простых символов и GStrings (интерполированными строками) Groovy, так как в последнем случае интерполированные значения вставляются в финалстрока для оценки всего идентификатора:

def firstname = "Homer"
map."Simpson-${firstname}" = "Homer Simpson"

assert map.'Simpson-Homer' == "Homer Simpson"

Источник: https://groovy -lang.org / syntax.html # _quoted_identifiers

Если вы хотите использовать заключенные в кавычки идентификаторы, вам нужно будет сохранить все значения на карте, например:

def map = [:]
map."trigger-${cname}" = true

assert map."trigger-${cname}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...