Câu trả lời:
Vì Groovy không có điểm đánh dấu EOL (chẳng hạn như ;
), nó sẽ bị nhầm lẫn nếu bạn đặt toán tử vào dòng sau
Điều này sẽ hoạt động thay thế:
def a = "test" +
"test" +
"test"
như trình phân tích cú pháp Groovy biết mong đợi điều gì đó ở dòng sau
Groovy coi bản gốc của bạn def
là ba tuyên bố riêng biệt. Điều đầu tiên chỉ định test
cho a
, hai thứ hai cố gắng làm cho "test"
tích cực (và đây là nơi nó không thành công)
Với new String
phương thức hàm tạo, trình phân tích cú pháp Groovy vẫn ở trong hàm tạo (vì dấu ngoặc nhọn chưa đóng), vì vậy nó có thể nối ba dòng với nhau thành một câu lệnh một cách hợp lý.
Đối với Chuỗi nhiều dòng thực sự, bạn cũng có thể sử dụng dấu ngoặc kép:
def a = """test
test
test"""
Sẽ tạo một chuỗi với thử nghiệm trên ba dòng
Ngoài ra, bạn có thể làm cho nó gọn gàng hơn bằng cách:
def a = """test
|test
|test""".stripMargin()
các stripMargin
phương pháp sẽ cắt trái (lên đến và bao gồm các |
char) từ mỗi dòng
stripMargin()
.
|
ký tự trên dòng thêm
"""
chuỗi
stripIndent()
hoạt động.
Bạn có thể nói với Groovy rằng câu lệnh sẽ đánh giá quá dòng kết thúc bằng cách thêm một cặp dấu ngoặc đơn ( ... )
def a = ("test"
+ "test"
+ "test")
Tùy chọn thứ hai là sử dụng dấu gạch chéo ngược \
, ở cuối mỗi dòng:
def a = "test" \
+ "test" \
+ "test"
FWIW, điều này giống với cách hoạt động của các câu lệnh nhiều dòng trong Python.
Tương tự như stripMargin()
, bạn cũng có thể sử dụng dảiIndent () như
def a = """\
test
test
test""".stripIndent()
Bởi vì
Dòng có số khoảng trắng đầu tiên ít nhất sẽ xác định số cần loại bỏ.
bạn cũng cần phải thụt lề "test" đầu tiên và không đặt nó trực tiếp sau inital """
( \
đảm bảo chuỗi nhiều dòng không bắt đầu bằng một dòng mới).
def a = b + + "/" + c
. Trong trường hợp này, hai ký hiệu + rõ ràng là vấn đề.