Метод get()
для векторов не реализован непосредственно на Vec
. Вместо этого это функция среза. Итак, самый простой вариант - сначала разыменовать ваш вектор, получив срез, а затем вызвать get()
на этом срезе:
impl<V> MyMap<usize, V> for Vec<Option<V>> {
fn get(&self, key: &usize) -> Option<&V> {
match (**self).get(*key).expect("undersized map") {
None => None,
Some(v) => Some(&v),
}
}
}
Поскольку self
имеет тип &Vec<...>
, нам нужно дважды разыменовать, чтобы получить срез:
- При однократном разыменовании мы получаем
Vec<Opiton<V>>
. - При разыменовании снова используется реализация
Deref
на векторе и получается [Option<V>]
.
В качестве примечания, тело метода можно упростить с помощью метода Option::as_ref()
:
fn get(&self, key: &usize) -> Option<&V> {
(**self).get(*key).expect("undersized map").as_ref()
}