我正在阅读HashMap
's get
function,但是在源代码中找不到类型参数K
。
为什么K
子句中存在where
特质绑定,而函数签名中却没有?
pub fn get<Q: ?Sized>(&self, k: &Q) -> Option<&V>
where K: Borrow<Q>,
Q: Hash + Eq
{
self.search(k).map(|bucket| bucket.into_refs().1)
}
答案 0 :(得分:5)
mv
是K
的类型参数,并已引入at the beginning of the applicable impl
block:
HashMap<K, V, S>
它适用于整个块,包括get
,它增加了一个附加约束impl<K, V, S> HashMap<K, V, S>
where K: Eq + Hash,
S: BuildHasher
。
这种指定K: Borrow<Q>
的{{1}}类型的方法可能有点笨拙,但是它使我们能够例如请执行以下操作:
get
答案 1 :(得分:0)
我认为search
方法主体中的get
方法使用K: Borrow<Q>
特征范围,因此get
方法需要相同的特征范围。
关于在获取方法参数中使用&str
或&String
作为键值,
仅使用&Q
类型