gpt4 book ai didi

indexing - 实现 Index 特征以返回一个不是引用的值

转载 作者:行者123 更新时间:2023-11-29 07:54:33 30 4
gpt4 key购买 nike

我有一个简单的结构,我想为其实现 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 typesexpected type &f64, found type f64。作为一个还没有完全理解 Rust 类型系统如何工作的人,我尝试简单地在表达式上加上 &:

fn index(&self, idx: usize) -> &f64 {
&(self.start + (idx as f64) * self.step)
}

现在这告诉我借用的值没有足够长的生命周期,所以它可能需要一个生命周期变量?

fn index<'a>(&self, idx: usize) -> &'a f64 {
&(self.start + (idx as f64) * self.step)
}

错误是一样的,但注释现在给出的是 lifetime 'a 而不是 lifetime #1,所以我想那是没有必要的,但在这一点上我觉得就像我被困住了一样。我很困惑,对于大多数语言来说,如此简单的练习在 Rust 中变得如此难以实现,因为我想要做的就是从恰好位于引用后面的函数返回计算。我应该如何为按需计算值的简单结构实现 Index

最佳答案

Index trait 是为了返回一个借用的指向 self 成员的指针(例如 Vec 中的一个项目)。 Index 特征中的 index 方法的签名使得实现它以具有您描述的行为是不切实际的,因为您必须存储 返回的每个值>index in self 并确保指针保持有效,直到 MyStruct 被删除。

关于indexing - 实现 Index 特征以返回一个不是引用的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39113649/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com