Estou tendo dificuldade para descobrir como a sintaxe de string funciona no Rust. Especificamente, estou tentando descobrir como criar uma string de várias linhas.
Estou tendo dificuldade para descobrir como a sintaxe de string funciona no Rust. Especificamente, estou tentando descobrir como criar uma string de várias linhas.
Respostas:
Todos os literais de string podem ser divididos em várias linhas; por exemplo:
let string = "line one
line two";
é uma sequência de duas linhas, a mesma que "line one\nline two"
(é claro que também é possível usar a \n
fuga de nova linha diretamente). Se você deseja apenas quebrar uma cadeia de caracteres em várias linhas por motivos de formatação, pode escapar da nova linha e do espaço em branco inicial com a \
; por exemplo:
let string = "one line \
written over \
several";
é o mesmo que "one line written over several"
.
Se você deseja quebras de linha na string, pode adicioná-las antes de \
:
let string = "multiple\n\
lines\n\
with\n\
indentation";
É o mesmo que "multiple\nlines\nwith\nindentation";
concat!()
macro para completar as opções dadas ( doc.rust-lang.org/std/macro.concat.html )
Caso você queira fazer algo um pouco mais, que pode ou não incluir aspas, barras invertidas, etc., use a notação literal de cadeia bruta :
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
Se você tiver seqüências de aspas duplas e símbolos de hash em sua sequência, poderá denotar um número arbitrário de hashes como um delimitador:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
A resposta de Huon está correta, mas se o recuo o incomodar, considere usar o Indoc, que é uma macro processual para seqüências de caracteres de múltiplas linhas recuadas. Significa "documento recuado". Ele fornece uma macro chamada indoc!()
que pega um literal de seqüência de caracteres de múltiplas linhas e o recorta, de modo que o caractere não-espaço mais à esquerda esteja na primeira coluna.
let s = indoc! {"
line one
line two
"};
O resultado é "line one\nline two\n"
.
O espaço em branco é preservado em relação ao caractere não-espaço mais à esquerda no documento, portanto, a seguir, a linha dois recuou 3 espaços em relação à linha um:
let s = indoc! {"
line one
line two
"};
O resultado é "line one\n line two\n"
.
Caso você queira recuar o texto de várias linhas no seu código:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
O resultado será o seguinte:
Multiline text goes next:
first line
second line
third line
\n
escape da nova linha, [...] você pode escapar da nova linha e do espaço em branco inicial com a{backslash}
. (é muito difícil digitar uma barra invertida no código em um comentário, ele aparece.)