【发布时间】:2016-08-24 02:50:43
【问题描述】:
我有一个简单的结构,我想为它实现Index,但作为 Rust 的新手,我在借用检查器方面遇到了很多麻烦。我的结构很简单,我想让它存储一个起始值和步长值,然后当被usize 索引时,它应该返回start + idx * step:
pub struct MyStruct {
pub start: f64,
pub step: f64,
}
我的直觉是我可以简单地获取Index 的签名并插入我的类型:
impl Index<usize> for MyStruct {
type Output = f64;
fn index(&self, idx: usize) -> &f64 {
self.start + (idx as f64) * self.step
}
}
这给出了错误mismatched types 说expected type &f64, found type f64。作为一个还没有完全理解 Rust 类型系统是如何工作的人,我尝试简单地在表达式上打上&:
fn index(&self, idx: usize) -> &f64 {
&(self.start + (idx as f64) * self.step)
}
这现在告诉我borrowed value does not live long enough,所以也许它需要一个生命周期变量?
fn index<'a>(&self, idx: usize) -> &'a f64 {
&(self.start + (idx as f64) * self.step)
}
错误是一样的,但是注释现在给出了lifetime 'a 而不是lifetime #1,所以我想这没有必要,但此时我觉得我被卡住了。我很困惑,对于大多数语言来说,如此简单的练习在 Rust 中变得如此难以实现,因为我想做的只是从恰好位于引用后面的函数返回计算。对于按需计算值的简单结构,我应该如何实现Index?
【问题讨论】: