Черты 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
?