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?

¿Fue útil?

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:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top