Почему конкатенация строк, возвращаемых из функции, является пустой строкой - Groovy 1.7.4
У меня есть следующий код:
public class TestGr
{
static String aaa = "wwww";
public static void main(args)
{
println "["+getAAA()+"]";
println "[" + getBBB() +"]";
}
static String getAAA()
{
return ""
+ "${aaa}"
}
static String getBBB()
{
return "" + "${aaa}"
}
}
Выход этого кода:
[]
[wwww]
Я не понимаю, почему при первом вызове я получаю пустую строку. Кто-нибудь знает, почему разрыв строки меняет вывод функции?
1 ответ
Это то, как разбирается заводной. Поскольку точки с запятой в конце операторов являются необязательными, переводы строки иногда имеют значение.
getAAA () анализируется как два оператора, например:
static String getAAA() {
return "";
+"${aaa}";
}
Хотя одинарный +
оператор не имеет смысла со строковым аргументом, groovy не может его поймать из-за его динамической природы. Там может быть postive()
мета-метод на строку, которая сделает его действительным.
РЕДАКТИРОВАТЬ:
Для лучшего представления о том, что происходит, начните groovyConsole
и загрузите ваш скрипт. Выберите "Проверить AST" в меню "Сценарий". Вы увидите что-то вроде этого: