我正在阅读《Rust 编程》一书。在第17章中我无法理解这一点:
self: Box<Self>
Run Code Online (Sandbox Code Playgroud)
你能简单地解释一下吗?
首先,让我们提供一些背景信息,如书中所述:
\ntrait State {\n fn request_review(self: Box<Self>) -> Box<dyn State>;\n}\nRun Code Online (Sandbox Code Playgroud)\n书的下面进一步解释了:
\n\n\n我们\xe2\x80\x99已将
\nrequest_review方法添加到特征中State;所有实现该特征的类型现在都需要实现该request_review方法。请注意,我们没有使用self、&self或&mut self作为该方法的第一个参数,而是使用self: Box<Self>。Box此语法意味着该方法仅在保存类型时调用时才有效。此语法获取 的所有权Box<Self>,使旧状态无效,以便 的状态值Post可以转换为新状态。
让我举一个例子。假设我们有一个A实现的结构State:
struct A {}\n\nimpl State for A {\n fn request_review(self: Box<Self>) -> Box<dyn State> {\n todo!();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n如果我们尝试这段代码:
\nlet a = A {};\na.request_review();\nRun Code Online (Sandbox Code Playgroud)\n,我们会得到一个编译器错误。但是,如果我们尝试下面的代码,就不会有问题:
\nlet a = A {};\nBox::new(a).request_review();\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1708 次 |
| 最近记录: |