Receptor de método

&self indica que el método toma prestado el objeto de forma inmutable. Hay otros posibles receptores para un método:

  • &self: toma prestado el objeto del llamador utilizando una referencia compartida e inmutable. El objeto se puede volver a utilizar después.
  • &mut self: toma prestado el objeto del llamador mediante una referencia única y mutable. El objeto se puede volver a utilizar después.
  • self: asume el ownership del objeto y lo aleja del llamador. El método se convierte en el propietario del objeto. El objeto se eliminará (es decir, se anulará la asignación) cuando el método devuelva un resultado, a menos que se transmita su ownership de forma explícita. El ownership completa no implica automáticamente una mutabilidad.
  • mut self: igual que lo anterior, pero el método puede mutar el objeto.
  • Sin receptor: se convierte en un método estático de la estructura. Normalmente se utiliza para crear constructores que se suelen denominar new.

Además de las variantes self, también hay tipos de envoltorios especiales que pueden ser tipos de receptor, como Box<Self>.

Considera recalcar los conceptos “compartido e inmutable” y “único y mutable”. Estas restricciones siempre vienen juntas en Rust debido a las reglas del borrow checker, y self no es una excepción. No es posible referenciar una estructura desde varias ubicaciones y llamar a un método mutable (&mut self) en ella.