Ich versuche, Wiederholungen in einer iterierbaren Sequenz zu finden. Außerdem möchte ich die Elemente kennen, die in dieser Reihenfolge bis zu diesem Punkt aufgetreten sind.Typenkonflikt "gebundener Lebensdauerparameter" vs. "konkrete Lebensdauer" beim Füllen einer Sammlung von einer Schließung
Ich habe eine HashMap
erstellt und versuche, insert
darauf aus einem von take_while
verwendeten Verschluss zu rufen. Jedoch habe ich es bisher nicht geschafft, es aufgrund von Typkonflikten in Bezug auf konkrete/gebundene Lebensdauern kompilieren zu lassen.
ist hier eine vereinfachte Version meines Codes, die den gleichen Fehler aufweist:
use std::collections::HashSet;
fn main() {
let mut seq = HashSet::new();
let mut insert = |k| seq.insert(k);
(1..10).cycle().take_while(insert);
}
Hier sind die Fehler, die ich erhalten:
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
Wie muss ich für sie den Code ändern zu Arbeit?
neugierig, es funktioniert, wenn der Verschluss direkt in den 'take_while' Anruf verschoben wird: http://is.gd/OgVK2i –
@ker, es funktioniert, weil Sie eine subtil andere Sache tun - Sie verwenden eine implizite Dereferenzierung in dem Muster, das die Originalcode nicht. –