Ho cercato di creare vettore di chiusure in questo modo:Qual è il tipo dedotto di un vettore di chiusure?
fn main() {
let mut vec = Vec::new();
vec.push(Box::new(||{ 10 }));
vec.push(Box::new(||{ 20 }));
println!("{}", vec[0]());
println!("{}", vec[1]());
}
che ha dato il seguente rapporto di errore:
error: mismatched types:
expected `[closure RustTest.rs:4:20: 4:28]`,
found `[closure RustTest.rs:5:20: 5:28]`
(expected closure,
found a different closure) [E0308]
RustTest.rs:5 vec.push(Box::new(||{ 20 }));
^~~~~~~~
ho riparato specificando il tipo in modo esplicito:
let mut vec: Vec<Box<Fn() -> i32>> = Vec::new();
Così la mia domanda è: qual è il tipo dedotto di vec
e perché è così?
Perché non può solo dedurre Box i32>? –
VRW
Si scopre che ogni funzione ha il suo tipo distinto http://stackoverflow.com/a/28151275/4734315 Sono curioso di sapere quale sia stata la ragione di tale decisione. – VRW
@VRW è quello che intendevo con la mia prima frase: "Ogni chiusura ha un tipo anonimo generato automaticamente, unico." Hai un suggerimento su come avrei potuto formularlo meglio? – Shepmaster