gpt4 book ai didi

vector - 尝试索引到 Rust 中的向量时出现 SliceIndex 特征绑定(bind)不满足错误

转载 作者:行者123 更新时间:2023-11-29 08:34:45 25 4
gpt4 key购买 nike

我有一个结构:

pub struct SomeCollection<'a> {
items: Vec<&'a SomeValue>,
name_mapping: HashMap<&'a str, usize>,
index_mapping: HashMap<&'a str, usize>
}

impl<'a> Index for SomeCollection<'a> {
type Output = Option<&'a SomeValue>;

fn index(&self, value_name: &str) -> &Self::Output {
match self.name_mapping.get(value_name) {
Some(index) => &self.items.get(index),
None => match self.index_mapping.get(value_name) {
Some(index) => &self.items.get(index),
None => &None
}
}
}
}

当我尝试编译这段代码时,出现以下错误:

error[E0277]: the trait bound `&usize: std::slice::SliceIndex<[&SomeValue]>` is not satisfied
--> src\some_collection.rs:49:48
|
49 | Some(index) => &self.items.get(index),
| ^^^ slice indices are of
type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[&SomeValue]>` is not implemented for `&usize`

Rust 似乎在告诉我,我不能用 index 索引一个 vector,这是一个 usize。我不确定为什么我需要实现这个特性,因为它应该已经为默认向量实现了。谁能告诉我我收到此错误的真正原因?此代码中可能还有其他尚未浮出水面的错误,因此请在回答时牢记这一点。

最佳答案

也许编译错误很难理解,但至少是准确的。它告诉您,index 是一个引用 &usize,但是 Vec 只能使用值 usize 进行索引。所以您所要做的就是取消引用 index

此外,如果找不到键/索引,通常会索引 panic。 (这就是为什么标准库提供 Vec::getHashMap::get 作为单独的方法以及索引,它们不会 panic 但如果给定的键/索引不在集合中,则返回 None。)

impl<'a> Index<&str> for SomeCollection<'a> {
type Output = &'a SomeValue;

fn index(&self, value_name: &str) -> &Self::Output {
match self.name_mapping.get(value_name) {
Some(index) => &self.items[*index],
None => match self.index_mapping.get(value_name) {
Some(index) => &self.items[*index],
None => panic!("Missing key: {:?}", value_name),
}
}
}
}

关于vector - 尝试索引到 Rust 中的向量时出现 SliceIndex 特征绑定(bind)不满足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56661368/

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