Me está costando descubrir cómo funciona la sintaxis de cadenas en Rust. Específicamente, estoy tratando de descubrir cómo hacer una cadena de varias líneas.
Me está costando descubrir cómo funciona la sintaxis de cadenas en Rust. Específicamente, estoy tratando de descubrir cómo hacer una cadena de varias líneas.
Respuestas:
Todos los literales de cadena se pueden dividir en varias líneas; por ejemplo:
let string = "line one
line two";
es una cadena de dos líneas, igual que "line one\nline two"
(por supuesto, también se puede usar el \n
escape de nueva línea directamente). Si desea dividir una cadena en varias líneas por motivos de formato, puede escapar de la nueva línea y del espacio en blanco inicial con un \
; por ejemplo:
let string = "one line \
written over \
several";
es el mismo que "one line written over several"
.
Si desea saltos de línea en la cadena, puede agregarlos antes de \
:
let string = "multiple\n\
lines\n\
with\n\
indentation";
Es lo mismo que "multiple\nlines\nwith\nindentation";
concat!()
macro para completar las opciones dadas ( doc.rust-lang.org/std/macro.concat.html )
En caso de que desee hacer algo un poco más, que puede incluir o no comillas, barras diagonales inversas, etc., use la notación literal de cadena sin formato :
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
Si tiene secuencias de comillas dobles y símbolos hash dentro de su cadena, puede denotar un número arbitrario de hashes como delimitador:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
La respuesta de Huon es correcta, pero si la sangría le molesta, considere usar Indoc, que es una macro de procedimiento para cadenas de varias líneas con sangría. Significa "documento sangrado". Proporciona una macro llamada indoc!()
que toma un literal de cadena multilínea y lo desangra para que el carácter que no está en el espacio de la izquierda esté en la primera columna.
let s = indoc! {"
line one
line two
"};
El resultado es "line one\nline two\n"
.
El espacio en blanco se conserva en relación con el carácter no espacial más a la izquierda en el documento, por lo que la siguiente línea tiene dos espacios sangrados en relación con la línea uno:
let s = indoc! {"
line one
line two
"};
El resultado es "line one\n line two\n"
.
En caso de que desee sangrar texto multilínea en su código:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
El resultado será el siguiente:
Multiline text goes next:
first line
second line
third line
\n
escape de nueva línea [...] puede escapar de la nueva línea y el espacio en blanco inicial con un{backslash}
. (Parece que es muy difícil escribir una barra invertida en el código en un comentario).