Os scripts do Groovy geram um erro:
def a = "test"
+ "test"
+ "test"
Erro:
No signature of method: java.lang.String.positive() is
applicable for argument types: () values: []
Embora este script funcione bem:
def a = new String(
"test"
+ "test"
+ "test"
)
Por quê?
def a = b + + "/" + c
. Neste caso, os dois símbolos + são obviamente o problema.Respostas:
Como groovy não tem marcador EOL (como
;
), ele fica confuso se você colocar o operador na linha seguinteIsso funcionaria em vez disso:
como o analisador Groovy sabe esperar algo na linha seguinte
O Groovy vê seu original
def
como três instruções separadas. O primeiro atribuitest
aa
, os dois segundos tentam tornar"test"
positivo (e é aqui que falha)Com o
new String
método do construtor, o analisador Groovy ainda está no construtor (já que a chave ainda não foi fechada), então ele pode unir logicamente as três linhas em uma única instruçãoPara verdadeiras strings de várias linhas, você também pode usar aspas triplas:
Irá criar uma String com teste em três linhas
Além disso, você pode torná-lo mais organizado:
o
stripMargin
método irá cortar a esquerda (até e incluindo o|
caractere) de cada linhafonte
stripMargin()
.|
caracteres nas linhas extras"""
stringsstripIndent()
funcionar.Você pode dizer ao Groovy que a instrução deve ser avaliada além da linha que termina adicionando um par de parênteses
( ... )
Uma segunda opção é usar uma barra invertida,,
\
no final de cada linha:FWIW, isso é idêntico a como as instruções de várias linhas do Python funcionam.
fonte
Semelhante a
stripMargin()
, você também pode usar stripIndent () comoPor causa de
você também precisa recuar o primeiro "teste" e não colocá-lo diretamente após o inicial
"""
(isso\
garante que a string de várias linhas não comece com uma nova linha).fonte