a Rust 1.0.0-notte, questo codice funziona bene:Perché i newtypes non usano i tratti dal tipo interno?
fn main() {
let x = 10f64;
let y = 20f64;
let z = x + y;
println!("z = {}", z);
}
Ma se provo ad usare un newtype (secondo il rust book):
struct Metres(f64);
fn main() {
let x = Metres(10f64);
let y = Metres(20f64);
let z = x + y;
println!("z = {}", z);
}
ottengo questo errore di compilazione:
test.rs:6:13: 6:18 error: binary operation `+` cannot be applied to type `Metres`
test.rs:6 let z = x + y;
^~~~~
error: aborting due to previous error
Dal Metres
è fondamentalmente un f64
, perché il compilatore non può utilizzare lo stesso +
operatore e creare un nuovo oggetto Metres
per z
?
Come posso utilizzare newtypes se non riesco a fare cose semplici come l'aggiunta e così via? In che modo sono "molto utili" (come li chiama il libro)?
(C'è un old question su questo, ma la ruggine cambia molto, quindi sto reasking)
Questo in realtà ha molto senso. È un peccato che non ci sia un modo più breve per ricavare le cose. – Rory