0
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
}
오류 메시지 :
struct Object<'a> {
holded: &'a Holded,
}
기능에서 : 당신이 게시 한 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_ 나는이 오류를 가지고 있으며, 다른 게시물을 보는 것이 이것에 도움이되지 않는다. –
나는 또한 그것들 중 많은 것을 보았고 그 문제는 하나에 설명되어있다. - 기존 질문 중 * *에 * 잘못된 점을 지적하지 않을 때 얼마나 유용합니까? 당신이 무엇이 잘못되었는지 우리에게 말하지 않으면, 우리는 당신이 이미 이해하지 못했던 동일한 대답을 반복 할 것이고, 당신은 도움을받지 못할 것이며, 더 나쁜 경우에는 다음 사람이하지 않을 대답이 하나 더있을 것입니다. 읽고 대신 코드를 수정하도록 요청하고 무시하십시오. – Shepmaster