rust 在“Cow”上实现“AsRef”和“Borrow”

ecbunoof  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(253)

在标准库中,Cow以不同的方式实现AsRefBorrow
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
    }
}

这个区别很重要吗?

r8uurelv

r8uurelv1#

这两种方法之间没有明显的区别,它们可以交换而不会有任何问题。第一种方法使用隐式deref强制,第二种方法使用显式dereference强制。这两种方法都可以将&Cow<'_, T>转换为&T,因为Cow实现了Deref

相关问题