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

发布于 2024-09-25 07:25:08 字数 427 浏览 2 评论 0原文

我有以下代码:

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]

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

I have the following code:

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}" 
  }
}

The output of this code is:

[]
[wwww]

I do not understand why in the first call I get an empty string. Does anybody know why a line break change the output of a function?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静谧 2024-10-02 07:25:08

这就是 groovy 被解析的方式。由于语句末尾的分号是可选的,换行符有时会产生影响。

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

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

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

编辑:

为了更好地了解发生的情况,启动 groovyConsole 并加载脚本。从脚本菜单中选择“检查 AST”。您会看到类似这样的内容:

AST 浏览器图像

It's the way the groovy is being parsed. Since semicolons at the end of statements are optional, newlines sometimes make a difference.

getAAA() is being parsed as two statements, like this:

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

Even though the unary + operator doesn't make sense with a string arg, groovy can't catch it due to its dynamic nature. There might be a postive() meta method on string that would make it valid.

EDIT:

For a better idea of what's going on, start up groovyConsole and load your script. Select "Inspect AST" from the Script menu. You'll see something like this:

AST Browser Image

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文