为什么从函数返回的gstrings的串联是一个空字符串 - Groovy 1.7.4

时间:2010-09-30 21:46:29

标签: windows macos groovy gstring

我有以下代码:

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 个答案:

答案 0 :(得分:3)

这是解析groovy的方式。由于语句末尾的分号是可选的,因此新行有时会有所不同。

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

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

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

编辑:

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

AST Browser Image