Devolver una cadena de un método en Rust
-
21-12-2019 - |
Pregunta
Nota del editor:La sintaxis de esta pregunta es anterior a Rust 1.0 y la sintaxis actualizada a 1.0 genera errores diferentes, pero los conceptos generales siguen siendo los mismos en Rust 1.0.
Tengo una estructura T con una name
campo, me gustaría devolver esa cadena del name
función.No quiero copiar toda la cadena, sólo el puntero:
struct T {
name: ~str,
}
impl Node for T {
fn name(&self) -> &str { self.name }
// this doesn't work either (lifetime error)
// fn name(&self) -> &str { let s: &str = self.name; s }
}
trait Node {
fn name(&self) -> &str;
}
¿Por qué está mal?¿Cuál es la mejor manera de devolver un &str
de una función?
Solución
Tienes que tomar una referencia a self.name
y garantizar que la vida útil de &self
y &str
son lo mismo:
struct T {
name: String,
}
impl Node for T {
fn name<'a>(&'a self) -> &'a str {
&self.name
}
}
trait Node {
fn name(&self) -> &str;
}
También puedes usar elisión de por vida, como se muestra en la definición del rasgo.En este caso, une automáticamente la vida útil de self
y el regresado &str
.
Echa un vistazo a estos capítulos de libros: