Les scripts Groovy soulèvent une erreur:
def a = "test"
+ "test"
+ "test"
Erreur:
No signature of method: Java.lang.String.positive() is
applicable for argument types: () values: []
Bien que ce script fonctionne bien:
def a = new String(
"test"
+ "test"
+ "test"
)
Pourquoi?
Comme groovy n’a pas de marqueur EOL (comme ;
) cela devient confus si vous mettez l'opérateur sur la ligne suivante
Cela fonctionnerait à la place:
def a = "test" +
"test" +
"test"
comme le sait l'analyseur Groovy, il faut s'attendre à quelque chose sur la ligne suivante
Groovy voit votre def
original sous la forme de trois instructions distinctes. Le premier assigne test
à a
, les deux autres essaient de faire "test"
positif (et c’est là que ça échoue)
Avec le new String
méthode constructeur, l’analyseur Groovy est toujours dans le constructeur (l’accolade n’ayant pas encore été fermé), il peut donc relier logiquement les trois lignes en une seule instruction
Pour les véritables chaînes multi-lignes, vous pouvez également utiliser la citation triple:
def a = """test
test
test"""
Va créer une chaîne avec test sur trois lignes
En outre, vous pouvez le rendre plus propre en:
def a = """test
|test
|test""".stripMargin()
la stripMargin
methode coupera la gauche (jusqu'à la |
char) de chaque ligne
Semblable à stripMargin()
, vous pouvez également utiliser stripIndent () comme
def a = """\
test
test
test""".stripIndent()
À cause de
La ligne contenant le moins d'espaces en début de ligne détermine le nombre à supprimer.
vous devez également indenter le premier "test" et ne pas le mettre directement après le """
initial (le \
garantit que la chaîne multiligne ne commence pas par une nouvelle ligne).
Vous pouvez dire à Groovy que l'instruction doit être évaluée au-delà de la ligne se terminant en ajoutant une paire de parenthèses ( ... )
def a = ("test"
+ "test"
+ "test")
Une deuxième option consiste à utiliser une barre oblique inversée, \
, à la fin de chaque ligne:
def a = "test" \
+ "test" \
+ "test"
FWIW, ceci est identique au fonctionnement des instructions multi-lignes Python).