Tôi đang có một thời gian khó khăn để tìm ra cách cú pháp chuỗi hoạt động trong Rust. Cụ thể, tôi đang cố gắng tìm ra cách tạo một chuỗi nhiều dòng.
Tôi đang có một thời gian khó khăn để tìm ra cách cú pháp chuỗi hoạt động trong Rust. Cụ thể, tôi đang cố gắng tìm ra cách tạo một chuỗi nhiều dòng.
Câu trả lời:
Tất cả các chuỗi ký tự có thể được chia thành nhiều dòng; ví dụ:
let string = "line one
line two";
là một chuỗi hai dòng, giống như "line one\nline two"
(tất nhiên người ta cũng có thể sử dụng \n
lối thoát mới trực tiếp). Nếu bạn muốn chỉ ngắt một chuỗi trên nhiều dòng vì lý do định dạng, bạn có thể thoát khỏi dòng mới và khoảng trắng hàng đầu với a \
; ví dụ:
let string = "one line \
written over \
several";
cũng giống như "one line written over several"
.
Nếu bạn muốn ngắt dòng trong chuỗi, bạn có thể thêm chúng trước \
:
let string = "multiple\n\
lines\n\
with\n\
indentation";
Nó giống như "multiple\nlines\nwith\nindentation";
concat!()
macro để hoàn thành các tùy chọn đã cho ( doc.rust-lang.org/std/macro.concat.html )
Trong trường hợp bạn muốn làm một cái gì đó lâu hơn một chút, có thể bao gồm hoặc không bao gồm dấu ngoặc kép, dấu gạch chéo ngược, v.v., hãy sử dụng ký hiệu chuỗi ký tự thô :
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
Nếu bạn có chuỗi các dấu ngoặc kép và ký hiệu băm trong chuỗi của mình, bạn có thể biểu thị số lượng băm tùy ý dưới dạng dấu phân cách:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
Câu trả lời của Huon là đúng nhưng nếu vết lõm làm phiền bạn, hãy xem xét sử dụng Indoc , đó là một macro thủ tục cho các chuỗi nhiều dòng thụt lề. Nó là viết tắt của "tài liệu thụt lề." Nó cung cấp một macro được gọi là indoc!()
một chuỗi nhiều dòng theo nghĩa đen và bỏ qua nó để ký tự không phải không gian ngoài cùng bên trái nằm trong cột đầu tiên.
let s = indoc! {"
line one
line two
"};
Kết quả là "line one\nline two\n"
.
Khoảng trắng được bảo toàn liên quan đến ký tự không phải không gian ngoài cùng bên trái trong tài liệu, do đó, phần sau có hai dòng được thụt vào 3 khoảng trắng so với dòng một:
let s = indoc! {"
line one
line two
"};
Kết quả là "line one\n line two\n"
.
Trong trường hợp bạn muốn thụt lề văn bản nhiều dòng trong mã của mình:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
Kết quả sẽ như sau:
Multiline text goes next:
first line
second line
third line
\n
lối thoát mới [...] bạn có thể thoát khỏi dòng mới và khoảng trắng hàng đầu với a{backslash}
. (rất khó để nhập một dấu gạch chéo ngược trong mã trong một bình luận, nó xuất hiện.)