所以,在:生锈的生命周期实际上意味着什么?
fn v1<'a> (a:~[&'a str]) -> ~[&'a str] {
return a;
}
#[test]
fn test_can_create_struct() {
let x = v1("Hello World".split(' ').collect());
}
我知道,我读过http://static.rust-lang.org/doc/master/guide-lifetimes.html#named-lifetimes,但我不明白这是什么代码实际上不会。
功能基本参数化像普通的新生力量,但伴随一生,是我见过的IRC频道说,但让我们来想象是这样的话,我们有一个L,这是一些特定的生命周期结构。
显然我打电话含蓄:
v1::<L>("Hello World".split(' ').collect());
..但我不是。传递给此函数的生命周期是一个生命周期的实例,它不是生命类型,所以该评论对我没有任何意义。
我的意思是,我基本明白怎么回事(我认为):返回~[&str]
具有相同的寿命作为主叫方的范围,想必test_can_create_struct()
功能。这是因为(据我所知)函数v1
是从调用函数调用生命周期实例。
非常混乱。
然后我们像其他一些例子: https://gist.github.com/bvssvni/8970459
这里有一个片段:
impl<'a> Data<'a> {
pub fn new() -> Data<'a> {
Data { a: None, b: None }
}
pub fn a(&'a mut self, a: int) -> State<'a, Step1> {
self.a = Some(a);
State { data: self }
}
}
现在,这里我天真地假设Data<'a>
意味着功能a()
寿命情况是一样的。
即,如果您创建了Data
(let blah = Data::new()
)并呼叫blah.a()
,则生命期从create调用继承;即只要父对象Data
确实返回,State
对象就会存在。
......但显然这也是错误的。所以我现在根本不知道寿命变量的意思。
帮助!
Lifetimes *是*类型系统的一部分;他们不是实例。 –