Почему конкатенация строк, возвращаемых функцией, является пустой строкой - Groovy 1.7.4 - PullRequest
1 голос
/ 01 октября 2010

У меня есть следующий код:

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 Ответ

3 голосов
/ 01 октября 2010

Это то, как разбирается заводной. Поскольку точки с запятой в конце операторов являются необязательными, символы новой строки иногда имеют значение.

getAAA () анализируется как два оператора, например:

static String getAAA() {
    return "";
    +"${aaa}";
}

Хотя унарный оператор + не имеет смысла со строковым аргументом, groovy не может его уловить из-за его динамической природы. В строке может быть мета-метод postive(), который сделает его действительным.

EDIT:

Чтобы лучше понять, что происходит, запустите groovyConsole и загрузите свой скрипт. Выберите «Проверить AST» в меню «Сценарий». Вы увидите что-то вроде этого:

AST Browser Image

...