Groovy: возвращение строки без косой черты вызывает исключение - PullRequest
0 голосов
/ 06 мая 2019

У меня есть простой скрипт, который работает и работает:

println testReturn()

String testReturn() {
    def str = /asdf/
    return str
}

Однако, если я изменяю его на это, я вижу ошибку при запуске:

println testReturn()

String testReturn() {
    return /asdf/
}

Ошибка:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
test.groovy: 6: unexpected token: / @ line 6, column 12.
       return /asdf/
              ^

1 error

Кто-нибудь знает, почему я должен определить строку без косой черты перед ее возвратом?

1 Ответ

0 голосов
/ 08 мая 2019

Мне кажется, что оператор 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.

...