1. fn foo(self, arg2: Type2) -> ReturnType {
    2. // body
    3. }

    self可以有三种形式

    • self:代表所有权,可以对值做任何事情:移动、销毁、修改、通过引用借出值。传递值时,值被移动到新位置:新位置拥有值了,原位置不能再访问值。大多数方法不使用self
    • &mut self:代表对没有所有权的值的临时独占访问。可以覆盖值,如同另一个值交换;但不能移走值。&mut self适用于需要修改自身的方法。
    • &self:代表对没有所有权的值的临时共享访问,适用于需要观察self的方法。