回答:
すべての文字列リテラルは複数行に分割できます。例えば:
let string = "line one
line two";
と同じ2行の文字列です"line one\nline two"
(もちろん、\n
改行エスケープを直接使用することもできます)。書式設定の理由で文字列を複数行に分割するだけの場合は、\
;で改行と先頭の空白をエスケープできます。例えば:
let string = "one line \
written over \
several";
と同じ"one line written over several"
です。
文字列に改行が必要な場合は、\
:の前に追加できます。
let string = "multiple\n\
lines\n\
with\n\
indentation";
それは同じです "multiple\nlines\nwith\nindentation";
concat!()
マクロを追加して、指定されたオプション(doc.rust-lang.org/std/macro.concat.html)を完成させたいと思います
引用符やバックスラッシュなどが含まれる場合と含まれない場合がある少し長いことを行う場合は、生の文字列リテラル表記を使用します。
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
文字列内に二重引用符とハッシュ記号のシーケンスがある場合は、任意の数のハッシュを区切り文字として指定できます。
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
Huonの答えは正しいですが、インデントが気になる場合は、インデントされた複数行の文字列の手続きマクロであるIndocの使用を検討してください。「インデントされたドキュメント」の略です。これは、indoc!()
複数行の文字列リテラルを受け取り、インデントを解除するというマクロを提供します。これにより、左端の非スペース文字が最初の列に配置されます。
let s = indoc! {"
line one
line two
"};
結果は"line one\nline two\n"
です。
空白は、ドキュメント内の左端の非スペース文字に対して相対的に保持されるため、次の例では、1行目に対して2行目にインデントされた3つのスペースがあります。
let s = indoc! {"
line one
line two
"};
結果は"line one\n line two\n"
です。
コードで複数行のテキストをインデントしたい場合:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
結果は次のようになります。
Multiline text goes next:
first line
second line
third line
\n
改行のエスケープを[...]あなたは改行をエスケープし、と空白をリードすることができます{backslash}
。(コメントのコードにバックスラッシュを入力するのは非常に困難です。表示されます。)