【发布时间】:2020-02-02 16:39:04
【问题描述】:
我是 rust 新手,我刚刚了解了 Borrow 特征。
据我了解,Borrow 特征暴露了一个函数borrow,它的工作原理就像借用(即&),但你也可以在通用约束中使用它(你不能用正常的借用语法来做) .
我有这个功能
pub fn get<Q>(&self, key: &Q) -> Option<&V>
where K: Borrow<Q>,
Q: Hash + Eq + ?Sized
{
let bucket = self.bucket_key(key);
self.buckets[bucket].iter().find(|&(ref ekey, _)| ekey.borrow() == key).map(|&(_, ref v)| v)
}
(我在 YouTube 上观看了 Jon Gjengset 的视频)
对我来说奇怪的是,我们将结构上定义的K 类型限制为像Borrow<Q> 一样工作。
所以我想知道这个约束究竟对K 和Q 说了什么。
这是否意味着我们将K 约束为像Borrow<Q> 一样,或者K 在这里固定(因为它已经在结构上定义)并且我们正在约束Q(在幕后Rust将其转换为 Q: Unborrow<K> 之类的东西或类似的东西)。
我希望我说得通。我通常使用 C#,这样的东西没有意义。
【问题讨论】:
标签: rust