编者注:此问题中的语法早于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
的最佳方法是什么?
答案 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
的生命周期联系在一起。
看看这些书的章节: