This Rust tutorial spiega il meccanismo fold()
bene, e questo codice di esempio:Come faccio a sommare un vettore usando la piega?
let sum = (1..4).fold(0, |sum, x| sum + x);
funziona come previsto.
mi piacerebbe eseguirlo su un vettore, in modo sulla base di tale esempio, prima ho scritto questo:
let sum: u32 = vec![1,2,3,4,5,6].iter().fold(0, |sum, val| sum += val);
che gettò un errore:
error: binary assignment operation `+=` cannot be applied to types `_` and `&u32` [E0368]
let sum = ratings.values().fold(0, |sum, val| sum += val);
^~~~~~~~~~
ho indovinato che questo potrebbe essere un errore di riferimento connessi per qualche ragione, così cambiato che a fold(0, |sum, &val| sum += val)
, che ha portato con
error: mismatched types:
expected `u32`,
found `()`
Hm, forse qualcosa non va con la chiusura? Usando {sum += x; sum }
, ho ottenuto
binary assignment operation `+=` cannot be applied to types `_` and `&u32`
di nuovo.
Dopo ulteriori prove ed errori, aggiungendo mut
-sum
lavorato:
let sum = vec![1,2,3,4,5,6].iter().fold(0, |mut sum, &x| {sum += x; sum});
Qualcuno potrebbe spiegare il motivo per cui fold()
per i vettori differisce tanto dal tutorial? O c'è un modo migliore per gestire questo?
Per riferimento, sto utilizzando Rust beta, 2015-04-02.
ti ha introdotto una grande differenza sostituendo 'somma + x' da' sum + = x' . – Levans
Non ci posso credere, come potrei mancarmi ... Grazie! – mmatyas