我有一个想要实现的简单结构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
saying 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
对于一个简单的结构,其值是根据需要计算的?