Sto cercando di trovare ripetizioni in una sequenza iterabile. Inoltre, voglio conoscere gli elementi che si sono verificati in quella sequenza fino a quel momento.Tipo mismatch "bound lifetime parameter" vs "concrete lifetime" durante il riempimento di una raccolta da una chiusura
Ho creato un HashMap
e sto provando a chiamare insert
su di esso da una chiusura utilizzata da take_while
. Tuttavia, finora non sono riuscito a farlo compilare a causa di mancate corrispondenze di tipo relative a vite concatenate/vincolate.
Ecco una versione semplificata del mio codice che espone lo stesso errore:
use std::collections::HashSet;
fn main() {
let mut seq = HashSet::new();
let mut insert = |k| seq.insert(k);
(1..10).cycle().take_while(insert);
}
Qui ci sono gli errori che ottengo:
error[E0631]: type mismatch in closure arguments
--> src/main.rs:6:21
|
5 | let mut insert = |k| seq.insert(k);
| ----------------- found signature of `fn(_) -> _`
6 | (1..10).cycle().take_while(insert);
| ^^^^^^^^^^ expected signature of `for<'r> fn(&'r {integer}) -> _`
error[E0271]: type mismatch resolving `for<'r> <[[email protected]/main.rs:5:22: 5:39 seq:_] as std::ops::FnOnce<(&'r {integer},)>>::Output == bool`
--> src/main.rs:6:21
|
6 | (1..10).cycle().take_while(insert);
| ^^^^^^^^^^ expected bound lifetime parameter, found concrete lifetime
Come ho bisogno di modificare il codice per poter lavoro?
curioso, funziona se la chiusura viene spostato direttamente nel 'chiamata take_while': http://is.gd/OgVK2i –
@ker, che funziona perché si sta facendo una cosa leggermente diversa - stai usando un implicito dereferenziamento nel modello, che il il codice originale no. –