Receptor de Método

O &self acima indica que o método toma emprestado o objeto imutavelmente. Existem outros receptores possíveis para um método:

  • &self: pega emprestado o objeto do chamador como uma referência compartilhada e imutável. O objeto pode ser usado novamente depois.
  • &mut self: pega emprestado o objeto do chamador como uma referência única e mutável. O objeto pode ser usado novamente depois.
  • self: toma posse do objeto e o move do chamador. O método se torna o proprietário do objeto. O objeto será descartado (desalocado) quando o método retorna, a menos que sua ownership (posse) seja explicitamente transmitida. Posse completa não significa automaticamente mutabilidade.
  • mut self: o mesmo que acima, mas enquanto o método possui o objeto, ele pode alterá-lo também.
  • Sem receptor: isso se torna um método estático (static) na estrutura. Normalmente usado para criar construtores que, por convenção, são chamados new.

Além das variantes de self, também existem tipos especiais de wrapper que podem ser tipos de receptores, como Box<Self>.

Considere enfatizar “compartilhado e imutável” e “único e mutável”. Essas restrições sempre vêm juntos no Rust devido às regras do Borrow Checker (verificador de empréstimo), e self não é uma exceção. Não será possível referenciar uma struct de vários locais e chamar um método mutável (&mut self) nela.