Comment puis-je calculer la somme d'un vecteur à l'aide de plier?

Cette Rouille tutoriel explique la fold() mécanisme bien, et cet exemple de code:

let sum = (1..4).fold(0, |sum, x| sum + x);

fonctionne comme prévu.

J'aimerais le faire tourner sur un vecteur, en se basant sur cet exemple, j'ai d'abord écrit ce qui suit:

let sum: u32 = vec![1,2,3,4,5,6].iter().fold(0, |sum, val| sum += val);

qui a jeté une erreur:

error: binary assignment operation `+=` cannot be applied to types `_` and `&u32` [E0368]
let sum = ratings.values().fold(0, |sum, val| sum += val);
                                              ^~~~~~~~~~

J'ai deviné cela pourrait être une référence-erreur lié pour quelque raison, donc j'ai changé pour fold(0, |sum, &val| sum += val), ce qui a entraîné

error: mismatched types:
expected `u32`,
   found `()`

Hm, peut-être que quelque chose ne va pas avec la fermeture? À l'aide de {sum += x; sum }, j'ai eu

binary assignment operation `+=` cannot be applied to types `_` and `&u32`

de nouveau.

Après d'autres essais et d'erreurs, l'ajout de mut à sum travaillé:

let sum = vec![1,2,3,4,5,6].iter().fold(0, |mut sum, &x| {sum += x; sum});

Quelqu'un pourrait-il expliquer la raison pour laquelle fold() pour les vecteurs diffère tellement du tutoriel? Ou est-il une meilleure façon de gérer cela?

Pour référence, je suis en utilisant la Rouille bêta, 2015-04-02.

  • Vous avez mis en place une grande différence par le remplacement de sum + x par sum += x.
  • Je ne peux pas le croire, comment ai-je pu rater ça... Merci!
InformationsquelleAutor mmatyas | 2015-04-09