代码之家  ›  专栏  ›  技术社区  ›  Skarab

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

  •  1
  • Skarab  · 技术社区  · 14 年前

    我有以下代码:

    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 回复  |  直到 14 年前
        1
  •  3
  •   ataylor    14 年前

    这是对groovy的分析方式。由于语句末尾的分号是可选的,换行符有时会有区别。

    getaaa()被分析为两个语句,如下所示:

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

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

    编辑:

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

    AST Browser Image