Это все связано с приоритетом оператора.
Большинство * языков имеют правило приоритета для операторов (какие выбираются первыми, когда есть несколько опций). Порядок Groovys можно найти здесь .
Как видите, +
входит в позицию 5, но троичный входит в низкую 14
Это означает, чтоGroovy анализирует ваше выражение как (добавлены скобки, чтобы показать):
('a' + f) ? 'b' : ('z' + 'c')
, который при заполнении переменных становится
('atrue') ? 'b' : ('zc')
В groovy любой непустой (и ненулевой)Строка считается true
, если она принимается как логическое значение, поэтому результат приведенного выше будет b
. Как вы видели, ответ заключается в добавлении скобок, чтобы показать парсеру, что вы на самом деле хотите
(* Lisps, Forth и, вероятно, больше не ?)