Нельзя использовать заключенный в кавычки идентификатор для определения стандартной переменной. Вот часть документации по синтаксису 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}"