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 で受け入れられる型を除外したい場合に限られる。