Holded
のインスタンスを保持したいのですが、配列になっているのでできません。このインスタンスを配列から「抽出」してObject
インスタンスに保持するにはどうすればよいですか? (私の元のコードでは、配列はありませんが反復子はありません)。ここで同等のコードは次のとおりです。`array`は長時間生きていません
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
}
エラーメッセージ:あなたが投稿したMCVEで
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> {
| ^
[同じエラーメッセージと** 87個の質問**](http://stackoverflow.com/search?q=is%3Aq+Cannot+infer+an+appropriate+lifetime+due+to+conflictingがあります。 +要件)。おそらく、あなたはそれらのいくつかを見直し、なぜこの*質問が特別で異なっていて、まだ答えられていないのかを説明する時間を取ることができますか? – Shepmaster
私はすでにそれらの多くを見ていましたが、ここの問題はほとんど私が静かではないことを理解しています_why_私はこのエラーがあり、他の投稿を見ることは私を助けません。 –
私はまたそれらの多くを見てきました。問題は1つで説明されています。 - 既存の質問のうち*何が*間違っているのかを指摘していないときの有用性を確認してください。あなたが何が間違っているのかを教えてくれないならば、私たちはあなたがすでに理解していない同じ答えを繰り返すだけで、あなたは助けられませんし、さらに悪いことに、読んで代わりに無視して、コードを修正するよう依頼してください。 – Shepmaster