Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 带&;str与寿命_Rust - Fatal编程技术网

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,您可以将其实现为一个普通函数,如