Занимать и AsRef разница в реализации - PullRequest
3 голосов
/ 12 апреля 2020

Черты Borrow и AsRef очень похожи в Rust. Если я правильно понимаю, они имеют одинаковую сигнатуру (за исключением имени метода) при реализации на одном типе, разница заключается в том, как они используются.

Но когда вы посмотрите на их реализацию Например, на Vec<T> есть небольшая разница:

slice.rs :

#[stable(feature = "rust1", since = "1.0.0")]
impl<T> Borrow<[T]> for Vec<T> {
    fn borrow(&self) -> &[T] {
        &self[..]
    }
}

ve c .rs :

#[stable(feature = "rust1", since = "1.0.0")]
impl<T> AsRef<[T]> for Vec<T> {
    fn as_ref(&self) -> &[T] {
        self
    }
}

Я считаю, что реализация AsRef здесь работает благодаря принуждению Deref. Но нельзя ли использовать тот же механизм для реализации Borrow?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...