Відповіді:
Оскільки в groovy немає маркера EOL (наприклад ;), він заплутається, якщо поставити оператора на наступний рядок
Це буде працювати замість цього:
def a = "test" +
"test" +
"test"
як Groovy аналізатор знає чекати чогось у наступному рядку
Groovy бачить ваш оригінал defяк три окремі заяви. Перші правонаступників testдо a, другий два рази , щоб зробити "test"позитивний (і це, де це не вийде )
За допомогою new Stringконструкторного методу аналізатор Groovy все ще знаходиться в конструкторі (оскільки дужка ще не закрилася), тому він може логічно об'єднати три рядки разом в одне твердження
Для справжніх рядкових рядків ви також можете використовувати потрійну цитату:
def a = """test
test
test"""
Створимо String з тестом у трьох рядках
Крім того, ви можете зробити його акуратніше:
def a = """test
|test
|test""".stripMargin()
stripMarginметод буде обрізати лівий (до і включаючи |символ) з кожного рядка
stripMargin().
|символи на додаткових рядках
"""рядків
stripIndent()працювати.
Подібно до stripMargin(), ви також можете використовувати stripIndent (), як
def a = """\
test
test
test""".stripIndent()
Тому що
Рядок з найменшою кількістю провідних пробілів визначає число, яке потрібно видалити.
Вам також потрібно відступити перший "тест", а не ставити його безпосередньо після inital """( \гарантує, що багаторядковий рядок не починається з нового рядка).
Ви можете сказати Groovy, що оператор повинен оцінювати минулий рядок, що закінчується, додавши пару дужок ( ... )
def a = ("test"
+ "test"
+ "test")
Другий варіант - використовувати зворотний проріз \, в кінці кожного рядка:
def a = "test" \
+ "test" \
+ "test"
FWIW, це ідентично тому, як працюють багаторядкові оператори Python.
def a = b + + "/" + c. У цьому випадку два + символи, очевидно, є проблемою.