从Rust中的方法返回一个字符串

时间:2014-04-11 21:00:04

标签: rust

  

编者注:此问题中的语法早于Rust 1.0,1.0更新语法会产生不同的错误,但Rust 1.0中的整体概念仍然相同。

我有一个带有name字段的struct T,我想从name函数返回该字符串。我不想复制整个字符串,只是指针:

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;
}

为什么这是错的?从函数返回&str的最佳方法是什么?

1 个答案:

答案 0 :(得分:5)

您必须引用self.name,并确保&self&str的生命周期相同:

struct T {
    name: String,
}

impl Node for T {
    fn name<'a>(&'a self) -> &'a str {
        &self.name
    }
}

trait Node {
    fn name(&self) -> &str;
}

您还可以使用 life elision ,如特质定义所示。在这种情况下,它会自动将self和返回的&str的生命周期联系在一起。

看看这些书的章节: