self
引数への型指定について。
self
引数の記法は省略版がよく使われるが、型を明示した記法もある。
省略版 | 詳細版 |
---|---|
self |
self: Self |
&self |
self: &Self |
&mut self |
self: &mut Self |
- 記述不可 - | self: Box<Self> |
self: Rc<Self> |
|
... |
以下は詳細版の例で、method
関数の self
引数が Box<Self>
型になっている。
fn main() {
let bx = Box::new(Test {});
bx.method();
}
struct Test {}
impl Test {
fn method(self: Box<Self>) {
// nop.
}
}
self
に許される型は、実装対象それ以外では、一部の組込型のみである。
他を指定すると『E0307 - self に使えない型』が発生する。
以下は使用できる型についての公式による説明。
『メソッド呼出と型変換』によると、Box<Self>
型は &Self
型と自動で型変換される。そのため、Box<Self>
型のメソッド引数が役立つのは、&Self
で受け入れられる型を除外したい場合に限られる。