Avatar ·

Em Rust: qual a diferença entre self e Self (maiúscula e minúscula)?

Olá a todos! Comecei a estudar Rust e me deparei com uma coisa estranha: no código, `self` e `Self` aparecem com frequência, mas são usados de forma diferente. Fiquei confuso. Aqui está um exemplo do livro de Rust que estou tentando entender: ```rust struct Point { x: f64, y: f64, } impl Point { fn new(x: f64, y: f64) -> Self { Self { x, y } } fn distance(&self, other: &Self) -> f64 { let dx = self.x - other.x; let dy = self.y - other.y; (dx * dx + dy * dy).sqrt() } } ``` Vejo que em `fn new` o retorno é `Self`, e em `fn distance` o parâmetro `other` tem o tipo `&Self`. Além disso, dentro dos métodos, acesso os campos através de `self.x`. Mas `self` e `Self` não são a mesma coisa? Por que são escritos de forma diferente? Minha pergunta: qual é a diferença fundamental entre `self` (com letra minúscula) e `Self` (com letra maiúscula)? Quando devo usar um e quando devo usar o outro? Posso substituir `Self` pelo nome da estrutura diretamente, por exemplo `Point`? E por que dentro