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つの別個のステートメントとして認識します。最初はtest
をa
に割り当て、2番目は2つを"test"
ポジティブ(そしてこれが失敗する場所)
とともに new String
コンストラクターメソッド、Groovyパーサーはまだコンストラクターにあるため(ブレースがまだ閉じていないため)、3行を論理的に1つのステートメントに結合できます。
真の複数行文字列の場合、三重引用符も使用できます。
def a = """test
test
test"""
3行のテストで文字列を作成します
また、次の方法できれいにできます。
def a = """test
|test
|test""".stripMargin()
stripMargin
method は、左(|
char)各行から
stripMargin()
と同様に、 stripIndent() を使用することもできます
def a = """\
test
test
test""".stripIndent()
のため
先行スペースの数が最も少ない行によって、削除する数が決まります。
最初の「テスト」もインデントする必要があり、最初の"""
の直後に配置しないでください(\
は、複数行の文字列が改行で始まらないようにします)。
括弧のペア( ... )
def a = ("test"
+ "test"
+ "test")
2番目のオプションは、バックスラッシュ\
、各行の最後:
def a = "test" \
+ "test" \
+ "test"
FWIW、これはPython複数行ステートメントの動作と同じです。