У меня есть структура:
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
, который является usize
.Я не уверен, почему мне нужно реализовать эту черту, поскольку она должна быть реализована для вектора по умолчанию.Может ли кто-нибудь объяснить мне истинную причину, по которой я получаю эту ошибку?В этом коде могут быть другие ошибки, которые еще не появились, поэтому имейте это в виду при ответе.