Saya mengalami kesulitan mencari tahu bagaimana sintaksis string bekerja di Rust. Secara khusus, saya mencoba mencari cara membuat string garis ganda.
Saya mengalami kesulitan mencari tahu bagaimana sintaksis string bekerja di Rust. Secara khusus, saya mencoba mencari cara membuat string garis ganda.
Jawaban:
Semua string literal dapat dipecah di beberapa baris; sebagai contoh:
let string = "line one
line two";
adalah string dua baris, sama seperti "line one\nline two"
(tentu saja seseorang dapat menggunakan \n
escape baris baru secara langsung juga). Jika Anda ingin memecah string di beberapa baris untuk alasan pemformatan, Anda dapat keluar dari baris baru dan memimpin spasi putih dengan \
; sebagai contoh:
let string = "one line \
written over \
several";
sama dengan "one line written over several"
.
Jika Anda ingin linebreak dalam string, Anda dapat menambahkannya sebelum \
:
let string = "multiple\n\
lines\n\
with\n\
indentation";
Itu sama dengan "multiple\nlines\nwith\nindentation";
concat!()
makro untuk melengkapi opsi yang diberikan ( doc.rust-lang.org/std/macro.concat.html )
Jika Anda ingin melakukan sesuatu yang sedikit lebih lama, yang mungkin termasuk tanda kutip, garis miring terbalik, dll., Gunakan notasi literal string mentah :
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
Jika Anda memiliki urutan tanda kutip ganda dan simbol hash di dalam string Anda, Anda dapat menunjukkan jumlah hash yang berubah-ubah sebagai pembatas:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
Jawaban Huon benar tetapi jika lekukan mengganggu Anda, pertimbangkan untuk menggunakan Indoc yang merupakan makro prosedural untuk string multi-line indentasi. Itu singkatan dari "dokumen indentasi." Ini memberikan makro yang disebut indoc!()
yang mengambil string multiline literal dan lepaskan indentasi sehingga karakter non-spasi paling kiri ada di kolom pertama.
let s = indoc! {"
line one
line two
"};
Hasilnya adalah "line one\nline two\n"
.
Whitespace dipertahankan relatif terhadap karakter non-spasi paling kiri dalam dokumen, jadi yang berikut memiliki dua spasi indentasi 3 spasi relatif terhadap baris satu:
let s = indoc! {"
line one
line two
"};
Hasilnya adalah "line one\n line two\n"
.
Jika Anda ingin membuat indentasi teks multiline dalam kode Anda:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
Hasilnya adalah sebagai berikut:
Multiline text goes next:
first line
second line
third line
\n
pelarian baris baru [...] Anda dapat keluar dari baris baru dan memimpin spasi putih dengan a{backslash}
. (Sangat sulit untuk mengetikkan backslash dalam kode dalam komentar, tampaknya.)