Мне кажется, что оператор return
обрабатывается как другие вызовы функций в groovy 2.x, и что косые строки плохо работают с вызовами функций без парней.
Пример:
println /asdf/ // fails
println(/asdf/) // works
println testReturn()
String testReturn() {
/asdf/ //works - implicit return
}
String btestReturn() {
return /asdf/ // fails
}
String testReturn() {
return(/asdf/) //works
}
в моей книге это неожиданное поведение и ограничение отличного парсера.
В groovy 3 (или, более конкретно, в данном случае, groovy 3.0.0-alpha-3), синтаксический анализатор был переписан и следующий код:
println /asdf/ // fails
println(/asdf/) // works
println testReturn1()
println testReturn2()
println testReturn3()
String testReturn1() {
/asdf/ // works
}
String testReturn2() {
return /asdf/ // works
}
String testReturn3() {
return(/asdf/) // works
}
дает несколько большеинформационная ошибка:
Caught: groovy.lang.MissingPropertyException: No such property: println for class: solution
groovy.lang.MissingPropertyException: No such property: println for class: solution
at solution.run(solution.groovy:1)
, которая говорит нам о том, что без паролей groovy не может определить, является ли println
свойством или вызовом метода.Удаление этой первой строки заставляет вышеуказанный код работать под groovy 3.x.