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()は、次のように2つのステートメントとして解析されます。

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

単項+演算子は文字列引数では意味がありませんが、groovyはその動的な性質のためにそれをキャッチできません。postive()文字列を有効にするメタメソッドが文字列にある可能性があります。

編集:

何が起こっているのかをよりよく理解するにはgroovyConsole、スクリプトを起動してロードします。スクリプトメニューから「ASTの検査」を選択します。次のようなものが表示されます。

ASTブラウザ画像

于 2010-09-30T22:14:43.830 に答える