Rust 在impl中为具有阴影方法名称的trait指定方法实现

Rust 在impl中为具有阴影方法名称的trait指定方法实现,rust,Rust,给定以下trait+impl块,如何从MyMap的get方法的实现中调用std::vec::vec的get方法 trait MyMap<K, V> { fn get(&self, key: &K) -> Option<&V>; } impl<V> MyMap<usize, V> for Vec<Option<V>> { fn get(&self, key: &u

给定以下trait+impl块,如何从
MyMap
get
方法的实现中调用
std::vec::vec
get
方法

trait MyMap<K, V> {
    fn get(&self, key: &K) -> Option<&V>;
}

impl<V> MyMap<usize, V> for Vec<Option<V>> {
    fn get(&self, key: &usize) -> Option<&V> {
        match Vec::get(self, *key).expect("undersized map") {
            None => None,
            Some(v) => Some(&v),
        }
    }
}
trait-MyMap{
fn get(&self,key:&K)->选项;
}
Vec的impl MyMap{
fn获取(&self,键:&usize)->选项{
匹配Vec::get(self,*key).expect(“缩小的映射”){
无=>无,
一些(v)=>一些(&v),
}
}
}

我试过:

  • 希望编译器能从我的类型推断,因为它们不同:
    self.get(*键)。期望…
    这使得编译器解析MyMap的get并抱怨类型不匹配
  • 限定类型名称:
    Vec::get(self,*key)。除了…
    ,它会混淆地解析
    MyMap
    的get,错误与
    self.get
  • 使用:
    ::get(self,*key)。期望…
    ,这会让编译器抱怨
    get
    根本不存在
  • Vec
    get
    包装在impl块外的fn中,这确实有效,但看起来非常可疑,似乎是错误的解决方案
向量的
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),
        }
    }
}
向量的
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),
        }
    }
}