Pour ton erreur du Borrow Checker c'est un peu difficile de t'aider avec les infos que tu donnes. Le plus utile aurait été l'erreur du compilateur elle même.
Bah en fait j'ai trouvé comme j'explique :-D Mais ça n'a pas été évident.
Dans le commit dont je parle si tu remets .iter() ça donne :
error[E0597]: `wrapper.response` does not live long enough
--> src/main.rs:57:27
|
46 | let mut seen = HashMap::new();
| -------- lifetime `'1` appears in the type of `seen`
...
57 | let interesting = wrapper
| ___________________________^
58 | | .response
| |_____________________^ borrowed value does not live long enough
...
64 | seen.insert(ad._id, ad);
| ----------------------- argument requires that `wrapper.response` is borrowed for `'1`
...
67 | });
| - `wrapper.response` dropped here while still borrowed
J'ai également essayé de faire de seen une HashMap<i32, Ad> au lieu de &Ad mais comme je disais ça revenait à essayer d'arnaquer le checker :
error[E0507]: cannot move out of `*ad` which is behind a shared reference
--> src/main.rs:64:37
|
64 | seen.insert(ad._id, *ad);
| ^^^ move occurs because `*ad` has type `Ad`, which does not implement the `Copy` trait
Au final comme je disais la solution était into_iter() dont la doc est explicite :
/// Creates a consuming iterator, that is, one that moves each value out of
/// the vector (from start to end). The vector cannot be used after calling
/// this.
Mais encore fallait-il savoir qu'il existe. Je ne sais plus comment j'ai fini par trouver mais c'était au détour d'un message en anglais assez peu explicite. Je me suis dit qu'en en parlant ici, ça ferait une ressource en français pour le suivant :-)
Sans prétention et sans vouloir te décourager, je pense que tu pourras te considérer rustacean
Oh c'était surtout pour la blague évidemment. Encore qu'au final je suis assez content de moi, c'est pas un simple Hello World de découverte.
quand tu n'auras plus d'erreurs du Borrow Checker ou que tu seras capable de toutes les corriger en comprenant réellement ce qu'il se passe derrière.
Ah par contre là je ne sais pas. Je me considère scalaïste et pourtant je t'assure que je me bats tous les jours contre le compilo et je ne gagne pas toujours :-D
Quand je reviens à un autre langage (Go, Python, C++), je vois toutes les horreurs que ces langages laissent faire au développeur à l'insu de leur plein grès et je me sens en grande insécurité.
Ah oui pareil, je ne me vois pas revenir à Java. Ou C ou équivalent si je devais toucher à nouveau à du "bas-niveau".
[^] # Re: users.rust-lang.org est là pour t'aider
Posté par Sufflope (site web personnel) . En réponse au journal Notifications d'hébergements pour le Hellfest en Rust. Évalué à 2.
Bah en fait j'ai trouvé comme j'explique :-D Mais ça n'a pas été évident.
Dans le commit dont je parle si tu remets
.iter()ça donne :J'ai également essayé de faire de
seenuneHashMap<i32, Ad>au lieu de&Admais comme je disais ça revenait à essayer d'arnaquer le checker :Au final comme je disais la solution était
into_iter()dont la doc est explicite :Mais encore fallait-il savoir qu'il existe. Je ne sais plus comment j'ai fini par trouver mais c'était au détour d'un message en anglais assez peu explicite. Je me suis dit qu'en en parlant ici, ça ferait une ressource en français pour le suivant :-)
Oh c'était surtout pour la blague évidemment. Encore qu'au final je suis assez content de moi, c'est pas un simple Hello World de découverte.
Ah par contre là je ne sais pas. Je me considère scalaïste et pourtant je t'assure que je me bats tous les jours contre le compilo et je ne gagne pas toujours :-D
Ah oui pareil, je ne me vois pas revenir à Java. Ou C ou équivalent si je devais toucher à nouveau à du "bas-niveau".