Скрипты Groovy вызывают ошибку:
def a = "test"
+ "test"
+ "test"
Ошибка:
No signature of method: java.lang.String.positive() is
applicable for argument types: () values: []
Пока этот скрипт работает нормально:
def a = new String(
"test"
+ "test"
+ "test"
)
Зачем?
def a = b + + "/" + c
. В этом случае, очевидно, проблема заключается в двух символах +.Ответы:
Поскольку у Groovy нет маркера EOL (например,
;
), он запутается, если вы поместите оператор в следующую строкуВместо этого это будет работать:
поскольку синтаксический анализатор Groovy знает, что ожидать чего-то в следующей строке
Groovy рассматривает ваш оригинал
def
как три отдельных утверждения. Первые правопреемниковtest
кa
, второй два раза , чтобы сделать"test"
положительный (и это, где это не получится )С помощью
new String
метода конструктора синтаксический анализатор Groovy все еще находится в конструкторе (поскольку фигурная скобка еще не закрыта), поэтому он может логически объединить три строки в один оператор.Для настоящих многострочных строк вы также можете использовать тройную кавычку:
Создадим строку с тестом на трех строках
Кроме того, вы можете сделать его более аккуратным:
stripMargin
метод будет обрезать левый (до и включая|
символ) из каждой строкиисточник
stripMargin()
.|
символы в дополнительных строках"""
строкstripIndent()
.Аналогично
stripMargin()
, вы также можете использовать stripIndent () какИз-за
вам также необходимо сделать отступ для первого «теста» и не помещать его сразу после начального
"""
(это\
гарантирует, что многострочная строка не начинается с новой строки).источник
Вы можете указать Groovy, что оператор должен вычисляться после окончания строки, добавив пару круглых скобок.
( ... )
Второй вариант - использовать обратную косую черту
\
в конце каждой строки:FWIW, это идентично тому, как работают многострочные операторы Python.
источник