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