Rust'ta dizgi sözdiziminin nasıl çalıştığını anlamakta zorlanıyorum. Özellikle, çok satırlı bir dizeyi nasıl oluşturacağımı anlamaya çalışıyorum.
Rust'ta dizgi sözdiziminin nasıl çalıştığını anlamakta zorlanıyorum. Özellikle, çok satırlı bir dizeyi nasıl oluşturacağımı anlamaya çalışıyorum.
Yanıtlar:
Tüm dize değişmezleri birkaç satıra bölünebilir; Örneğin:
let string = "line one
line two";
iki satırlı bir dizedir, aynı "line one\nline two"
(tabii ki \n
satırsonu kaçışını da doğrudan kullanabilir ). Biçimlendirme nedenlerinden ötürü bir dizgeyi birden çok satıra bölmek isterseniz, satırsonu ve öndeki boşluktan a \
; Örneğin:
let string = "one line \
written over \
several";
ile aynıdır "one line written over several"
.
Dizede satır sonu olmasını istiyorsanız, bunları aşağıdakilerden önce ekleyebilirsiniz \
:
let string = "multiple\n\
lines\n\
with\n\
indentation";
İle aynı "multiple\nlines\nwith\nindentation";
concat!()
verilen seçenekleri tamamlamak için makroyu eklemek istiyorum ( doc.rust-lang.org/std/macro.concat.html )
Tırnaklar, ters eğik çizgiler vb. İçerebilen veya içermeyen biraz daha uzun bir şey yapmak istemeniz durumunda, ham dize değişmez gösterimini kullanın :
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
Dizenizde çift tırnak ve karma sembol dizileriniz varsa, sınırlayıcı olarak rastgele sayıda karma belirtebilirsiniz:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
Huon'un cevabı doğrudur, ancak girinti sizi rahatsız ediyorsa, girintili çok satırlı dizeler için prosedürel bir makro olan Indoc'u kullanmayı düşünün . "Girintili belge" anlamına gelir. Çok indoc!()
satırlı bir dize değişmezi alan ve en soldaki boşluk olmayan karakterin ilk sütunda olması için girintisini kaldıran adlı bir makro sağlar .
let s = indoc! {"
line one
line two
"};
Sonuç "line one\nline two\n"
.
Boşluk, belgedeki en soldaki boşluk olmayan karaktere göre korunur, bu nedenle aşağıdaki satırda birinci satıra göre girintili 3 boşluk vardır:
let s = indoc! {"
line one
line two
"};
Sonuç "line one\n line two\n"
.
Kodunuzda çok satırlı metni girintilemek istemeniz durumunda:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
Sonuç şu olacaktır:
Multiline text goes next:
first line
second line
third line
\n
[...] satırsonu karakterinden ve öndeki boşluktan a ile kaçabilirsiniz{backslash}
. (Bir yorumda kodda ters eğik çizgi yazmak çok zor, öyle görünüyor.)