在标准库中,Cow
以不同的方式实现AsRef
和Borrow
。
在AsRef
中,它返回self
:
impl<T: ?Sized + ToOwned> AsRef<T> for Cow<'_, T> {
fn as_ref(&self) -> &T {
self
}
}
在Borrow
中,它返回&**self
:
impl<'a, B: ?Sized> Borrow<B> for Cow<'a, B>
where
B: ToOwned,
<B as ToOwned>::Owned: 'a,
{
fn borrow(&self) -> &B {
&**self
}
}
这个区别很重要吗?
1条答案
按热度按时间r8uurelv1#
这两种方法之间没有明显的区别,它们可以交换而不会有任何问题。第一种方法使用隐式deref强制,第二种方法使用显式dereference强制。这两种方法都可以将
&Cow<'_, T>
转换为&T
,因为Cow
实现了Deref
。