Chouette article didactique qui prend l’approche d’expliquer tout ce sur quoi repose les Stream pour en expliquer le fonctionnement. Top :)
Un petit détail sur la partie où X implémente Copy pour permettre de le réutiliser et éviter le move. En fait, ce n’est pas le compilateur qui décide de faire une copie avant d’effectuer la boucle for, c’est bien la signature de into_iter qui force ce comportement:
fn into_iter(self) -> Self::IntoIter
La fonction prend self par valeur. Pour une structure implémentant Copy, une copie sera faite, sinon ce sera un move.
Du coup, l’exemple ne se “désugarise” pas en:
let x = X { state: 0 };
let x_copy1 = x; // x_copy1 = X { state: 0 } -- copie de x en x_copy1
let iterator1 = x_copy1.into_iter(); // x_copy1 est consommé par into_iter mais pas x
for i in iterator1 {
println!("{i}")
}
let x_copy2 = x; // x_copy2 = X { state: 0 } -- copie de x en x_copy2
let iterator2 = x_copy2.into_iter(); // x_copy2 est consommé par into_iter mais pas x
for i in iterator2 {
println!("{i}")
}
Mais plutôt en:
let x = X { state: 0 };
let iterator1 = x.into_iter(); // x est copié pour l'envoyer à into_iter qui veut consommer self
for i in iterator1 {
println!("{i}")
}
let iterator2 = x.into_iter(); // idem
for i in iterator2 {
println!("{i}")
}
Chouette article didactique qui prend l’approche d’expliquer tout ce sur quoi repose les
Stream
pour en expliquer le fonctionnement. Top :)Un petit détail sur la partie où
X
implémenteCopy
pour permettre de le réutiliser et éviter le move. En fait, ce n’est pas le compilateur qui décide de faire une copie avant d’effectuer la boucle for, c’est bien la signature deinto_iter
qui force ce comportement:La fonction prend
self
par valeur. Pour une structure implémentantCopy
, une copie sera faite, sinon ce sera un move.Du coup, l’exemple ne se “désugarise” pas en:
Mais plutôt en:
Sinon, bon article. Merci :)
Bonjour :)
Merci de ta lecture. <3
Oui, j’ai un peu tordu la vérité pour expliquer la recopie du state 0, quitte à un peu travestire le comportement réel.
Mais tu as raison l’utilisation du terme “desugar” est un abus de langage de ma part ^^’