huo*_*uon 124
所有字符串文字都可以跨越多行,例如
let string = "line one
line two";
Run Code Online (Sandbox Code Playgroud)
是一个两行字符串,相同"line one\nline two"(当然也可以\n直接使用换行符).如果您希望仅为了格式化原因而跨越多行来断开字符串,则可以使用\例如以下内容来转义换行符和前导空格
let string = "one line \
written over \
several";
Run Code Online (Sandbox Code Playgroud)
是一样的"one line written over several".
c0g*_*c0g 61
如果你想做一些更长的事情,可能包括引号,反斜杠等,也可以使用原始字符串文字表示法:
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
Run Code Online (Sandbox Code Playgroud)
如果字符串中包含双引号和散列符号序列,则可以将任意数量的散列表示为分隔符:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
Run Code Online (Sandbox Code Playgroud)
dto*_*nay 40
Huon的答案是正确的,但如果缩进困扰你,请考虑使用Indoc,它是缩进多行字符串的过程宏.它代表"缩进文档".它提供了一个调用的宏indoc!(),它接受多行字符串文字并取消缩进,以便最左边的非空格字符位于第一列.
let s = indoc!("
line one
line two");
Run Code Online (Sandbox Code Playgroud)
结果是"line one\nline two".
如果您愿意,可以使用几种等效方法来格式化相同的内容,因此请选择您喜欢的方法.以下两者都会产生与上面相同的字符串.内容可以根据需要缩进 - 它不必是特定数量的空格.
let s = indoc!(
"line one
line two");
let s = indoc!("line one
line two");
Run Code Online (Sandbox Code Playgroud)
相对于文档中最左边的非空格字符保留空白,因此以下行相对于第一行有两行缩进的3个空格:
let s = indoc!("
line one
line two");
Run Code Online (Sandbox Code Playgroud)
结果是"line one\n line two".
phi*_*611 12
如果您想在不使用外部 crate 的情况下对带有换行符的多行字符串中的空格进行精细控制,您可以执行以下操作。示例取自我自己的项目。
impl Display for OCPRecData {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "OCPRecData {{\n\
\x20 msg: {:?}\n\
\x20 device_name: {:?}\n\
\x20 parent_device_name: {:?}\n\
}}", self.msg, self.device_name, self.parent_device_name)
}
}
Run Code Online (Sandbox Code Playgroud)
结果是
OCPRecData {
msg: Some("Hello World")
device_name: None
parent_device_name: None
}
Run Code Online (Sandbox Code Playgroud)
\n\ 在每个代码行的末尾在适当的位置创建一个换行符并丢弃这行代码中的更多空格\x20 (十六进制;十进制 32)是一个 ASCII 空格,也是字符串这一行中要保留的第一个空格的指示符\x20\x20\x20\x20并且\x20 有同样的效果小智 7
如果您想缩进代码中的多行文字:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
Run Code Online (Sandbox Code Playgroud)
结果将如下所示:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
Run Code Online (Sandbox Code Playgroud)