Eva*_*oll 2 lifetime rust lifetime-scoping
在编程 Rust 的第 295 页上,您可以找到以下内容:
幸运的是,标准库包含了全面的实现:
Run Code Online (Sandbox Code Playgroud)impl<'a, T, U> AsRef<U> for &'a T where T: AsRef<U>, T: ?Sized, U: ?Sized, { fn as_ref(&self) -> &U { (*self).as_ref() } }
我对&'a那里的使用感到困惑。这是什么背景?这不是在争论中使用as_ref,也不依赖于输出&U。我不认为我完全理解在这种情况下使用的生命周期。
我查了一下这个,因为我仍然不明白,而且答案仍然没有点击(有意义)。我发现convert.rs. 这似乎在任何地方都没有任何生命周期,但它实现了AsReftrait。那么为什么这本书有这个,而不是 Rust 中的实际代码?我在哪里可以找到书中提到的“一揽子实施”?
它没有用于论证
as_ref
它肯定是。该函数使用速记符号,可以扩展:
fn as_ref(&self) // becomes
fn as_ref(self: &Self) // becomes
fn as_ref(self: &&'a T)
Run Code Online (Sandbox Code Playgroud)
也不依赖于输出
&U
正确的。
那么为什么这本书有这个,而不是 Rust 中的实际代码?
Rust 每 6 周发布一次新的稳定版本。大概这本书没有,所以他们很可能使用的是旧版本的 Rust。希望这本书告诉你他们开发的版本。
正如E_net4 已经声明的那样,'a在 Rust 1.31 中删除了在这种情况下指定 的要求,如版本指南中所述。
您从书中提供的代码与Rust 1.30 中的代码相匹配:
Run Code Online (Sandbox Code Playgroud)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:
Run Code Online (Sandbox Code Playgroud)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 周的开发时间,足以让源代码发生变化。
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |