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.