Тернарный оператор присваивает значение переменной, поэтому здесь нельзя вызвать выражение присваивания. Но есть и другие проблемы с кодом, который вы представили. Например:
xxStr.tokenize('.') && ver = xxStr.pop()
Ожидать, что xxStr
после вызова xxStr.tokenize('.')
является списком, является неправильным представлением. xxStr
в этом выражении остается String
, поэтому при вызове pop
в нем будет выбрано MissingMethodException
.
Если ваш код будет однострочным, это не означает, что вы используете элегантное решение. В этом случае я бы сказал, что все наоборот. Кроме того, вы используете def
в динамическом контексте c (вы меняете тип с String
на List
). Это не запрещено, но в большинстве случаев это только вводит в заблуждение. Это делает ваш код сложнее для понимания и рассуждений.
Я бы настоятельно рекомендовал разделить код на два отдельных раздела: один отвечает за токенизацию строки в массив, а второй - за вывод версии. Это делает ваш код более понятным и простым для понимания. Если в Groovy было встроенное простое для чтения решение, вы могли бы рассмотреть возможность его использования. Но добавление этого ненужного уровня абстракции к такому простому варианту использования имеет очень мало смысла.