Groovy scripts wywołuje błąd:
def a = "test"
+ "test"
+ "test"
Błąd:
No signature of method: java.lang.String.positive() is
applicable for argument types: () values: []
Chociaż ten skrypt działa dobrze:
def a = new String(
"test"
+ "test"
+ "test"
)
Czemu?
def a = b + + "/" + c
. W tym przypadku problemem są oczywiście dwa symbole +.Odpowiedzi:
Ponieważ groovy nie ma znacznika EOL (takiego jak
;
), jest zdezorientowany, jeśli umieścisz operator w następującej liniiTo zadziałałoby zamiast tego:
ponieważ parser Groovy wie, że może się spodziewać czegoś w następnym wierszu
Groovy postrzega Twój oryginał
def
jako trzy oddzielne stwierdzenia. Pierwsze przypisujetest
doa
, drugi dwa spróbować zrobić"test"
pozytywne (i to jest, gdy nie powiedzie się)W przypadku
new String
metody konstruktora parser Groovy nadal znajduje się w konstruktorze (ponieważ nawias nie został jeszcze zamknięty), więc może logicznie połączyć trzy wiersze w jedną instrukcjęW przypadku prawdziwych ciągów wielowierszowych możesz również użyć potrójnego cudzysłowu:
Stworzy łańcuch z testem w trzech liniach
Możesz również uczynić to schludniejszym, wykonując:
stripMargin
sposób będzie wykończenia lewo (aż do i włączając|
znaki) z każdej liniiźródło
stripMargin()
.|
znaki w dodatkowych wierszach"""
ciągów znakówstripIndent()
działał.Podobnie
stripMargin()
, możesz również użyć stripIndent () jakZ powodu
musisz również wciąć pierwszy "test" i nie umieszczać go bezpośrednio po initalu
"""
(\
zapewnia, że wieloliniowy ciąg nie zaczyna się od nowej linii).źródło
Możesz powiedzieć Groovy'emu, że instrukcja powinna być oceniana poza końcem wiersza, dodając parę nawiasów
( ... )
Drugą opcją jest użycie odwrotnego ukośnika
\
na końcu każdego wiersza:FWIW, jest to identyczne z działaniem instrukcji wielowierszowych Pythona.
źródło