error[E0307]: invalid `self` parameter type: `Xxxx`

self の型に許可されない型を使用した。

背景情報

組込型の特権/self への型指定』によると、self に許される型は、実装対象それ以外では、一部の組込型のみである。

サンプル

以下では、型 MyType の実装中に self の型に i32 を指定している。


fn main() {}

struct MyType();
impl MyType {
    fn method(self: i32) {
        // nop.
    }
}

error[E0307]: invalid `self` parameter type: `i32`
 --> src/main.rs:5:21
  |
5 |     fn method(self: i32) {
  |                     ^^^
  |
  = note: type of `self` must be `Self` or a type that dereferences to it
  = help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)