Groovy の複数行文字列の何が問題なのでしょうか? 質問する

Groovy の複数行文字列の何が問題なのでしょうか? 質問する

Groovy スクリプトでエラーが発生します:

def a = "test"
  + "test"
  + "test"

エラー:

No signature of method: java.lang.String.positive() is 
applicable for argument types: () values: []

このスクリプトは正常に動作しますが、

def a = new String(
  "test"
  + "test"
  + "test"
)

なぜ?

ベストアンサー1

GroovyにはEOLマーカー( など)がないので、;次の行に演算子を置くと混乱します。

代わりに以下が機能します:

def a = "test" +
  "test" +
  "test"

Groovyパーサーは次の行に何かが来ると予測しているので

Groovyは元の文をdef3つの別々の文として扱います。最初の文testは に代入しa、次の2つは を"test"正にしようとします(そしてここで失敗します)

コンストラクタメソッドではnew String、Groovyパーサはまだコンストラクタ内にあるため(中括弧はまだ閉じていないため)、3行を論理的に1つの文に結合することができます。

真の複数行文字列の場合は、三重引用符を使用することもできます。

def a = """test
test
test"""

3行のテストを含む文字列を作成します

また、次の方法でもきれいにできます。

def a = """test
          |test
          |test""".stripMargin()

stripMargin方法|各行の左側(文字まで)を切り取ります

おすすめ記事