多行字符串文字的语法是什么?

时间:2015-04-07 03:43:11

标签: string rust

我很难弄清楚Rust语法中的字符串语法是如何工作的。具体来说,我试图找出如何制作多行字符串。

5 个答案:

答案 0 :(得分:102)

所有字符串文字都可以分成几行,例如

let string = "line one
line two";

是一个双行字符串,与"line one\nline two"相同(当然也可以直接使用\n换行符)。如果您希望仅出于格式化原因而断开多行中的字符串,则可以使用\转义换行符和前导空格,例如

let string = "one line \
    written over \
    several";

"one line written over several"相同。

答案 1 :(得分:45)

如果您想要做更长时间的事情,可能包括引号,反斜杠等,也可以不使用引号,反斜杠等,请使用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##"#
"###;

答案 2 :(得分:33)

Huon's answer是正确的,但如果缩进困扰你,请考虑使用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个空格:

let s = indoc!("
          line one
             line two");

结果为"line one\n line two"

答案 3 :(得分:6)

如果您想缩进代码中的多行文本:

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

答案 4 :(得分:3)

如果您想对带换行符的多行字符串中的空格进行精细的控制,而无需使用外部包装箱,则可以进行以下操作。来自我自己项目的示例。

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)
    }
}

结果

OCPRecData {
    msg: Some("Hello World")
    device_name: None
    parent_device_name: None
}
    每个代码行末端的
  • \n\在适当的位置创建一个换行符,并在此代码行中丢弃更多的空格
  • \x20(十六进制;十进制为32)是ASCII空间,是指示在此行的字符串中保留的第一个空格的指示符。
  • \x20\x20\x20\x20\x20 具有相同的作用