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 \nfuga 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
\nescape 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.)