我很难弄清楚Rust中的字符串语法是如何工作的 . 具体来说,我正在试图弄清楚如何制作一个多行字符串 .
如果你想做更长的事情,可能包括引号,反斜杠等,可以使用raw string literal notation:
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##"# "###;
所有字符串文字都可以跨越几行,例如
let string = "line one line two";
是一个两行字符串,与 "line one\nline two" 相同(当然也可以直接使用 \n 换行符) . 如果您希望仅出于格式化原因而断开多行的字符串,则可以使用 \ 转义换行符和前导空格 .
"line one\nline two"
\n
\
let string = "one line \ written over \ several";
与 "one line written over several" 相同 .
"one line written over several"
Huon's answer是正确的,但如果缩进困扰您,请考虑使用Indoc这是缩进多行字符串的过程宏 . 它代表"indented document."它提供了一个名为 indoc!() 的宏,它接受多行字符串文字并取消缩进,使最左边的非空格字符位于第一列 .
indoc!()
let s = indoc!(" line one line two");
结果是 "line one\nline two" .
如果您愿意,可以使用几种等效方法来格式化相同的内容,因此请选择您喜欢的方法 . 以下两者都会产生与上面相同的字符串 . 内容可以根据需要缩进 - 它不必是特定数量的空格 .
let s = indoc!( "line one line two"); let s = indoc!("line one line two");
相对于文档中最左边的非空格字符保留空白,因此以下行相对于第一行有两行缩进的3个空格:
结果是 "line one\n line two" .
"line one\n line two"
3 回答
如果你想做更长的事情,可能包括引号,反斜杠等,可以使用raw string literal notation:
如果字符串中包含双引号和散列符号序列,则可以将任意数量的散列表示为分隔符:
所有字符串文字都可以跨越几行,例如
是一个两行字符串,与
"line one\nline two"
相同(当然也可以直接使用\n
换行符) . 如果您希望仅出于格式化原因而断开多行的字符串,则可以使用\
转义换行符和前导空格 .与
"one line written over several"
相同 .Huon's answer是正确的,但如果缩进困扰您,请考虑使用Indoc这是缩进多行字符串的过程宏 . 它代表"indented document."它提供了一个名为
indoc!()
的宏,它接受多行字符串文字并取消缩进,使最左边的非空格字符位于第一列 .结果是
"line one\nline two"
.如果您愿意,可以使用几种等效方法来格式化相同的内容,因此请选择您喜欢的方法 . 以下两者都会产生与上面相同的字符串 . 内容可以根据需要缩进 - 它不必是特定数量的空格 .
相对于文档中最左边的非空格字符保留空白,因此以下行相对于第一行有两行缩进的3个空格:
结果是
"line one\n line two"
.