self: Box<Self> 是什么意思?

Ale*_*ria 7 rust

我正在阅读《Rust 编程》一书。在第17章中我无法理解这一点:

self: Box<Self>
Run Code Online (Sandbox Code Playgroud)

你能简单地解释一下吗?

at5*_*321 5

首先,让我们提供一些背景信息,如书中所述:

\n
trait State {\n    fn request_review(self: Box<Self>) -> Box<dyn State>;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

书的下面进一步解释了:

\n
\n

我们\xe2\x80\x99已将request_review方法添加到特征中State;所有实现该特征的类型现在都需要实现该request_review方法。请注意,我们没有使用self&self&mut self作为该方法的第一个参数,而是使用self: Box<Self>Box此语法意味着该方法仅在保存类型时调用时才有效。此语法获取 的所有权Box<Self>,使旧状态无效,以便 的状态值Post可以转换为新状态。

\n
\n

让我举一个例子。假设我们有一个A实现的结构State

\n
struct A {}\n\nimpl State for A {\n    fn request_review(self: Box<Self>) -> Box<dyn State> {\n        todo!();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果我们尝试这段代码:

\n
let a = A {};\na.request_review();\n
Run Code Online (Sandbox Code Playgroud)\n

,我们会得到一个编译器错误。但是,如果我们尝试下面的代码,就不会有问题:

\n
let a = A {};\nBox::new(a).request_review();\n
Run Code Online (Sandbox Code Playgroud)\n

  • 很有意思。我总是假设选项是“self”、“&amp;self”和“&amp;mut self”,但似乎还有[其他几个](https://doc.rust-lang.org/reference/items/linked- items.html#methods) (3认同)