Groovy необязательные круглые скобки и точки
Я изучаю Groovy и очень впечатлен тем, как он позволяет создавать интеллектуальный DSL, но я немного смущен правилами, когда круглые скобки и точки являются необязательными. Рассмотрим следующий код:
Integer take(Integer x) {x}
take 3 plus 4
это работает так, как ожидалось, и производит вывод 7 (при запуске в консоли), так как groovy понимает эту последнюю строку как take(3).plus(4)
.
теперь println take 3 plus 4
не работает, как groovy понимает, что как println(take).3(plus).4
что чушь.
каждый пример, который я вижу, показывает такие выражения сами по себе на линии, но, по-видимому,
s = take 3 plus 4
работает и сохраняет результат 7 в s. Мой вопрос в том, почему
println( take 3 plus 4 )
не работает? Очевидно, groovy будет анализировать такого рода выражения, даже если они сами по себе не находятся на линии (как показано в задании). Я бы подумал, что добавление этих скобок удалит двусмысленность из формы этого строка, которая не работает, и что она распечатает 7, Как я намеревался.
вместо groovy дает ошибку "неожиданный токен: 3". Насколько я могу судить, groovy не позволит необязательным скобкам или точкам внутри этого println, хотя это не кажется двусмысленным. Когда именно этот трюк сработает?
1 ответов
это относится к категории вложенного вызова метода, и в этом случае вы не можете опустить круглые скобки. Это вызывает неоднозначность, и результаты неожиданны, так как метод println считает, что вы передаете ему несколько параметров. Вы можете уменьшить неоднозначность, используя строку groovy в методе println.
println "${take 3 plus 4}"
Подробнее: Опустить Скобки