1

我有以下代码:

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]

我不明白为什么在第一次通话中我得到一个空字符串。有人知道为什么换行符会改变函数的输出吗?

4

1 回答 1

3

这是 groovy 被解析的方式。由于语句末尾的分号是可选的,因此换行有时会有所作为。

getAAA() 被解析为两个语句,如下所示:

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

即使一元运算+符对字符串 arg 没有意义,由于它的动态特性,groovy 也无法捕捉到它。字符串上可能有一个postive()元方法可以使其有效。

编辑:

为了更好地了解正在发生的事情,请启动groovyConsole并加载您的脚本。从脚本菜单中选择“检查 AST”。你会看到这样的东西:

AST 浏览器图片

于 2010-09-30T22:14:43.830 回答