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
을 세 개의 개별 진술로 간주합니다 . 제 양수인 test
에게 a
번째 두 시도가 만드는 "test"
(실패 곳이있다) 긍정적
로 new String
논리적으로 하나의 명령문에 함께 산신 참여할 수 있도록 생성자 메소드 그루비 파서 (브레이스가 아직 폐쇄되지 않은 바와 같이) 생성자 여전히
진정한 여러 줄 문자열의 경우 삼중 따옴표를 사용할 수도 있습니다.
def a = """test
test
test"""
세 줄의 테스트로 문자열을 만듭니다.
또한 다음과 같은 방법으로 깔끔하게 만들 수 있습니다.
def a = """test
|test
|test""".stripMargin()
이 stripMargin
메서드 는 |
각 줄에서 왼쪽 ( 문자 포함 )을 자릅니다.
답변
와 유사하게 stripIndent ()를 다음 과 같이 stripMargin()
사용할 수도 있습니다.
def a = """\
test
test
test""".stripIndent()
때문에
가장 적은 수의 선행 공백이있는 줄은 제거 할 수를 결정합니다.
당신은 또한 최초의 “테스트”들여 쓰기와 inital 후 직접 넣지 필요 """
합니다 ( \
보장하지만이 여러 줄 문자열은 줄 바꿈으로 시작되지 않습니다).
답변
한 쌍의 괄호를 추가하여 명령문이 줄 끝을지나 평가되어야한다고 Groovy에게 알릴 수 있습니다. ( ... )
def a = ("test"
+ "test"
+ "test")
두 번째 옵션은 \
각 행의 끝에 백 슬래시를 사용하는 것입니다 .
def a = "test" \
+ "test" \
+ "test"
FWIW, 이것은 파이썬 여러 줄 문이 작동하는 방식과 동일합니다.