Rust 带&;str与寿命
我试图为一个具有生命周期和挣扎的结构实现Rust 带&;str与寿命,rust,Rust,我试图为一个具有生命周期和挣扎的结构实现索引特性。我希望内部向量可以在&str上进行索引。即myqstr[“foo”] 以下是我得到的: pub struct QString<'a> { pub params: Vec<Param<'a>> } pub struct Param<'a> { pub name: &'a str, pub value: &'a str, } impl<'a, 'b>
索引
特性。我希望内部向量可以在&str
上进行索引。即myqstr[“foo”]
以下是我得到的:
pub struct QString<'a> {
pub params: Vec<Param<'a>>
}
pub struct Param<'a> {
pub name: &'a str,
pub value: &'a str,
}
impl<'a, 'b> ::std::ops::Index<&'b str> for QString<'a> {
type Output = Param<'a>;
fn index(&self, index: &'b str) -> &Param<'a> {
&self.params.iter()
.rposition(|ref p| p.name == index)
.map(|pos| self.params[pos])
.unwrap()
}
}
我知道
索引
希望我返回索引结构的借来值,我知道我要返回的生命周期是'a
,但在这种情况下这可能吗?您在错误的位置获取引用,您想在映射
函数中获取引用
self.params.iter()
.rposition(|ref p| p.name == index)
.map(|pos| &self.params[pos])
.unwrap()
因为您希望引用Vec
本身中的参数
这样做也会更容易
self.params.iter()
.rev()
.find(|p| p.name == index)
.unwrap()
谢谢rev()是零成本吗?我的意思是如果我想要效率?是的,
.rev()
只存在于可以从任意一端显式迭代的类型,因此它是有效的。@MartinAlgesten,是的,它是零成本的rev()
仅针对doubleEndeditor
s@loganfsmyth如果我想更改为type Output=option,Index
特性专门用于返回某个内容中存在的项目。由于结构中没有选项
,因此无法返回满足该要求的任何内容。一般来说,如果您想要一个非恐慌性的getter,您可以将其实现为一个普通函数,如