Avatar ·

En Rust: ¿cuál es la diferencia entre self y Self (minúscula y mayúscula)?

¡Hola a todos! Empecé a aprender Rust y me encontré con algo extraño: en el código a menudo aparecen `self` y `Self`, pero se usan de manera diferente. Estoy confundido. Aquí hay un ejemplo del libro de Rust que estoy tratando de 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() } } ``` Veo que en `fn new` se devuelve `Self`, y en `fn distance` el parámetro `other` tiene tipo `&Self`. Mientras tanto, dentro de los métodos accedo a los campos mediante `self.x`. Pero, ¿acaso `self` y `Self` son lo mismo? ¿Por qué se escriben de manera diferente? Mi pregunta: ¿cuál es la diferencia fundamental entre `self` (con minúscula) y `Self` (con mayúscula)? ¿Cuándo se debe usar uno y cuándo el otro? ¿Se puede escribir directamente el nombre de la estructura, como `Point`, en lugar de `Self`? ¿Y por qué dentro...