Ich möchte eine Holded
Instanz behalten, aber ich kann nicht, da es in einem Array ist. Wie kann ich diese Instanz aus dem Array "extrahieren" und in einer Object
Instanz speichern? (In meinem ursprünglichen Code habe ich kein Array, sondern Iteratoren). Hier ist der entsprechende Code:`Array` lebt nicht lange genug
struct Holded {
value: u8,
}
struct Holder;
impl Holder {
pub fn get(&self) -> [Holded; 2] {
[Holded { value: 0 }, Holded { value: 1 }]
}
}
struct Object<'a> {
holded: &'a Holded,
}
fn main() {
let holder = Holder;
let obj = work(&holder).unwrap();
println!("{}", obj.holded.value);
}
fn work(holder: &Holder) -> Option<Object> {
let mut obj: Object;
let array = holder.get();
for h in array.into_iter() {
if h.value == 1u8 {
obj = Object { holded: h };
return Some(obj);
}
}
None
}
Die Fehlermeldung:
error: `array` does not live long enough
--> src/main.rs:28:14
|
28 | for h in array.into_iter() {
| ^^^^^ does not live long enough
...
36 | }
| - borrowed value only lives until here
|
note: borrowed value must be valid for the anonymous lifetime #1 defined on the block at 24:43...
--> src/main.rs:24:44
|
24 | fn work(holder: &Holder) -> Option<Object> {
| ^
Es gibt [** 87 Fragen ** mit der gleichen Fehlermeldung] (http://stackoverflow.com/search?q=is%3Aq+Cannot+Infer+an+angewohnlich+Lebensdauer+zu+konflikt + Anforderungen). Vielleicht könnten Sie sich die Zeit nehmen, einige von ihnen zu rezensieren und zu erklären, warum * diese * Frage speziell und anders ist und noch nicht beantwortet wurde? – Shepmaster
Ich habe schon viele von ihnen gesehen, aber das Problem hier ist meistens ich verstehe nicht ruhig _why_ Ich habe diesen Fehler, und den anderen Beitrag zu sehen hilft mir dabei nicht. –
Ich habe auch viele von ihnen gesehen, und das Problem wird in einem erklärt. - Sehen Sie, wie nützlich es ist, wenn Sie nicht angeben, was mit den vorhandenen Fragen * falsch * ist? Wenn Sie uns nicht sagen, was falsch ist, werden wir nur die gleiche Antwort wiederholen, die Sie bereits nicht verstehen, Ihnen wird nicht geholfen, und, noch schlimmer, es wird noch eine weitere Antwort geben, die die nächste Person nicht beantworten wird Lesen Sie und ignorieren Sie stattdessen und bitten Sie darum, ihren Code zu korrigieren. – Shepmaster