I'm having a hard time figuring out how string syntax works in Rust. Specifically, I'm trying to figure out how to make a multiple line string.
问题:
回答1:
All string literals can be broken across several lines, e.g.
let string = "line one
line two";
is a two line string, the same as "line one\nline two"
(of course one can use the \n
newline escape directly too). If you wish to just break a string across multiple lines for formatting reasons you can escape the newline and leading whitespace with a \
, e.g.
let string = "one line \
written over \
several";
is the same as "one line written over several"
.
回答2:
In case you want to do something a bit longer, which may or may not include quotes, backslashes, etc., use the raw string literal notation:
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
If you have sequences of double quotes and hash symbols within your string, you can denote an arbitrary number of hashes as a delimiter:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
回答3:
Huon's answer is correct but if the indentation bothers you, consider using Indoc which is a procedural macro for indented multi-line strings. It stands for "indented document." It provides a macro called indoc!()
that takes a multiline string literal and un-indents it so the leftmost non-space character is in the first column.
let s = indoc!("
line one
line two");
The result is "line one\nline two"
.
There are a few equivalent ways to format the same thing if you prefer, so choose one you like. The following both result in the same string as above. The content can be indented as much as you like – it does not have to be a specific number of spaces.
let s = indoc!(
"line one
line two");
let s = indoc!("line one
line two");
Whitespace is preserved relative to the leftmost non-space character in the document, so the following has line two indented 3 spaces relative to line one:
let s = indoc!("
line one
line two");
The result is "line one\n line two"
.
回答4:
In case you want to indent multiline text in your code:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
The result will be the following:
Multiline text goes next:
first line
second line
third line