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