Это не используется в аргументе as_ref
Это, безусловно, так.Функция использует сокращенную запись, которая может быть расширена:
fn as_ref(&self) // becomes
fn as_ref(self: &Self) // becomes
fn as_ref(self: &&'a T)
и не привязана к выводу &U
Правильно.
Так почему в книге есть это, а не реальный код в Rust?
Rust выпускает новые стабильные версии каждые 6 недель.Предположительно книги нет, поэтому вполне вероятно, что они используют более старую версию Rust.Надеемся, что в книге рассказывается о версии, с которой они разработали.
Поскольку E_net4 уже указывал , требование указать 'a
в этом случае было удалено в Rust 1.31, так как задокументированов руководстве по выпуску .
Код, указанный вами в книге, соответствует , найденному в Rust 1.30 :
impl<'a, T: ?Sized, U: ?Sized> AsRef<U> for &'a T where T: AsRef<U>
{
fn as_ref(&self) -> &U {
<T as AsRef<U>>::as_ref(*self)
}
}
исходный код, который вы просмотрели , соответствует Rust 1.37 :
impl<T: ?Sized, U: ?Sized> AsRef<U> for &T where T: AsRef<U>
{
fn as_ref(&self) -> &U {
<T as AsRef<U>>::as_ref(*self)
}
}
Это примерно 42 недели времени разработки, достаточно для изменения исходного кода.