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は元の文をdef
3つの別々の文として扱います。最初の文test
は に代入しa
、次の2つは を"test"
正にしようとします(そしてここで失敗します)
コンストラクタメソッドではnew String
、Groovyパーサはまだコンストラクタ内にあるため(中括弧はまだ閉じていないため)、3行を論理的に1つの文に結合することができます。
真の複数行文字列の場合は、三重引用符を使用することもできます。
def a = """test
test
test"""
3行のテストを含む文字列を作成します
また、次の方法でもきれいにできます。
def a = """test
|test
|test""".stripMargin()
のstripMargin
方法|
各行の左側(文字まで)を切り取ります