Borrow 与 BorrowMut
#![allow(unused)] fn main() { trait Borrow<Borrowed: ?Sized> { fn borrow(&self) -> &Borrowed; } trait BorrowMut<Borrowed: ?Sized>: Borrow<Borrowed> { fn borrow_mut(&mut self) -> &mut Borrowed; } }
Borrow
trait 与 AsRef
trait 实现是一致的, 差别只在于 Borrow
trait 更严格一些.
即要求被引用的对象的 hash
值是一致的. 比如哈稀表的实现:
impl HashMap<K, V> where K: Eq + Hash
{
pub fn get<Key>(&self, k: &Key) -> Option<&V>
where Key: ?Sized + Eq + Hash, K: Borrow<Key>, V: ?Sized
{ ... }
}