[string] Groovy 다중 행 문자열의 문제점은 무엇입니까?

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, 이것은 파이썬 여러 줄 문이 작동하는 방식과 동일합니다.


답변