1. ホーム
  2. string

[解決済み] Groovyの複数行のStringの何が問題なのですか?

2022-03-13 02:43:15

質問

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

なぜ?

解決方法は?

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

このようにすれば、代わりに動作する。

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

Groovy パーサーは、次の行で何かを期待することを知っているからです。

Groovy は、あなたの元の def を 3 つの別々のステートメントとして使用します。 最初のステートメントでは testa を作成しようとし、2つ目は "test" を正にする(ここが失敗の原因)

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

真の複数行の文字列には、トリプルクォートを使用することもできます。

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

3行のテストを含むStringを作成します。

また、次のようにするとすっきりします。

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

その stripMargin メソッド は、左側(最大で | 文字) を各行から削除します。