Rust 中的多行字符串,保留前导空格
Multi-line string in Rust with preserved leading whitespace
在某些语言中可以写出这样的东西:
val some_string =
"""First line.
| Second line, with leading space."""
也就是说,一个多行字符串,其中所有前导 space 都被删除了一个点,但没有进一步。这可以通过编写在 Rust 中模仿:
let some_string =
"First line.\n \
Second line, with leading space.";
但是,这失去了更接近实际输出的好处。在 Rust 中有没有一种方法可以编写类似于示例伪代码的东西,保留(一些)前导 whitespace?
不,这是不可能的(v1.3
,而且可能会持续很长时间)。
但是,通常需要人类可读的多行字符串文字是某种常量描述,例如 CLI 程序的用法字符串。你经常看到这样缩进的东西:
const USAGE: &'static str = "
Naval Fate.
Usage:
...
";
我想这没问题。如果你有很多这样的字符串或者一个非常大的字符串,你可以使用 include_str!
.
Rust 1.7 的语言不支持它,但 Indoc 是一个可以做你想做的事情的过程宏。它代表“缩进文档”。它提供了一个名为 indoc!()
的宏,它采用多行字符串文字并取消缩进,因此最左边的非 space 字符位于第一列。
let some_string = indoc! {"
First line.
Second line, with leading space."
};
它也适用于原始字符串文字。
let some_string = indoc! {r#"
First line.
Second line, with leading space."#
};
两种情况下的结果都是"First line\n Second line, with leading space."
您可以使用引用 space \x20
的 ASCII 或引用 space \u{20}
.
的 Unicode 开始要缩进的行
let some_string =
"First line.\n\
\x20Second line, with leading space.\n\
\u{20}Third line, with leading space.";
你只需要引用第一个space。
let some_string =
"First line.\n\
\x20 Second line, with two leading spaces.\n\
\u{20} Third line, with two leading spaces.";
在某些语言中可以写出这样的东西:
val some_string =
"""First line.
| Second line, with leading space."""
也就是说,一个多行字符串,其中所有前导 space 都被删除了一个点,但没有进一步。这可以通过编写在 Rust 中模仿:
let some_string =
"First line.\n \
Second line, with leading space.";
但是,这失去了更接近实际输出的好处。在 Rust 中有没有一种方法可以编写类似于示例伪代码的东西,保留(一些)前导 whitespace?
不,这是不可能的(v1.3
,而且可能会持续很长时间)。
但是,通常需要人类可读的多行字符串文字是某种常量描述,例如 CLI 程序的用法字符串。你经常看到这样缩进的东西:
const USAGE: &'static str = "
Naval Fate.
Usage:
...
";
我想这没问题。如果你有很多这样的字符串或者一个非常大的字符串,你可以使用 include_str!
.
Rust 1.7 的语言不支持它,但 Indoc 是一个可以做你想做的事情的过程宏。它代表“缩进文档”。它提供了一个名为 indoc!()
的宏,它采用多行字符串文字并取消缩进,因此最左边的非 space 字符位于第一列。
let some_string = indoc! {"
First line.
Second line, with leading space."
};
它也适用于原始字符串文字。
let some_string = indoc! {r#"
First line.
Second line, with leading space."#
};
两种情况下的结果都是"First line\n Second line, with leading space."
您可以使用引用 space \x20
的 ASCII 或引用 space \u{20}
.
let some_string =
"First line.\n\
\x20Second line, with leading space.\n\
\u{20}Third line, with leading space.";
你只需要引用第一个space。
let some_string =
"First line.\n\
\x20 Second line, with two leading spaces.\n\
\u{20} Third line, with two leading spaces.";