Rust: ¿Cómo crear struct con string members?
(1)
Si la cadena debe ser propiedad de la estructura, entonces debe usar String
. Alternativamente, puede usar un &str
con una vida útil estática (es decir, la duración del programa). Por ejemplo:
struct Foo {
bar: String,
baz: &''static str,
}
fn main() {
let foo = Foo {
bar: "bar".to_string(),
baz: "baz",
};
println!("{}, {}", foo.bar, foo.baz);
}
Si la duración de la cadena es desconocida, entonces puede parametrizar Foo
con toda una vida:
struct Foo<''a> {
baz: &''a str,
}
Y si no está seguro de si la cadena será propiedad o no (útil para evitar asignaciones), entonces puede usar borrow::Cow
:
use std::borrow::Cow;
struct Foo<''a> {
baz: Cow<''a, str>,
}
fn main() {
let foo1 = Foo { baz: Cow::Borrowed("baz") };
let foo2 = Foo { baz: Cow::Owned("baz".to_string()) };
println!("{}, {}", foo1.baz, foo2.baz);
}
Tenga en cuenta que el tipo Cow
se parametriza durante toda la vida. La duración se refiere al tiempo de vida de la cadena prestada (es decir, cuando es un Borrowed
). Si tienes un Cow
, entonces puedes usar borrow
y obtener un &''a str
, con el que puedes hacer operaciones de cadena normales sin preocuparte por si asignar una nueva cadena o no. (Por lo general, no se requiere una llamada explícita para pedir borrow
debido a deref. A saber, los valores Cow
se desvían a su formulario prestado automáticamente. Entonces, &*val
donde val
tiene el tipo Cow<''a, str>
producirá un &str
.)
La sintaxis es de hecho obsoleta. El reemplazo de ~str
es String
, que se puede considerar como un buffer de cadena (es decir, el contenido de la cadena es modificable y es cultivable). A &str
es una vista inmutable de una cadena que no se puede cambiar en un código seguro.
¿Cómo crear una estructura con miembros de cadena? Los miembros deben ser propiedad de struct object. Soy nuevo en oxidarse, lo siento por una pregunta simple, pero no pude encontrar un ejemplo. Hubo un ejemplo desactualizado que usa "~" que parece estar en desuso ... Estoy buscando una declaración correcta de la estructura y luego un ejemplo de instanciación.