Groovy-Skripte lösen einen Fehler aus:
def a = "test"
+ "test"
+ "test"
Error:
No signature of method: java.lang.String.positive() is
applicable for argument types: () values: []
Während dieses Skript gut funktioniert:
def a = new String(
"test"
+ "test"
+ "test"
)
Warum?
def a = b + + "/" + c
. In diesem Fall sind die beiden + Symbole offensichtlich das Problem.Antworten:
Da groovy keinen EOL-Marker (wie z. B.
;
) hat, wird es verwirrt, wenn Sie den Operator in die folgende Zeile setzenDies würde stattdessen funktionieren:
wie der Groovy-Parser in der folgenden Zeile zu erwarten weiß
Groovy sieht Ihr Original
def
als drei separate Aussagen. Der erste weisttest
zua
, die zweiten beiden versuchen,"test"
positiv zu machen (und hier schlägt es fehl)Bei der
new String
Konstruktormethode befindet sich der Groovy-Parser noch im Konstruktor (da die Klammer noch nicht geschlossen wurde), sodass die drei Zeilen logisch zu einer einzigen Anweisung zusammengefügt werden könnenFür echte mehrzeilige Zeichenfolgen können Sie auch das dreifache Anführungszeichen verwenden:
Erstellt einen String mit Test in drei Zeilen
Sie können es auch ordentlicher machen, indem Sie:
Die
stripMargin
Methode schneidet die linke|
Zeile (bis einschließlich des Zeichens) von jeder Zeile abquelle
stripMargin()
.|
Zeichen in den zusätzlichen Zeilen"""
Zeichenfolgen verwendenstripIndent()
funktioniert.Sie können Groovy mitteilen, dass die Anweisung über das Zeilenende hinaus ausgewertet werden soll, indem Sie ein Paar Klammern hinzufügen
( ... )
Eine zweite Möglichkeit besteht darin
\
, am Ende jeder Zeile einen Backslash zu verwenden :FWIW, dies ist identisch mit der Funktionsweise von mehrzeiligen Python-Anweisungen.
quelle
Ähnlich wie
stripMargin()
könnten Sie auch stripIndent () like verwendenWegen
Sie müssen auch den ersten "Test" einrücken und nicht direkt nach dem Anfang einfügen
"""
(dies\
stellt sicher, dass die mehrzeilige Zeichenfolge nicht mit einer neuen Zeile beginnt).quelle