Я хочу сохранить экземпляр 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
}
Сообщение об ошибке:
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+appro++++++++++++++++++++++++++++++++++++++++++ + требования). Возможно, вы могли бы потратить время на просмотр некоторых из них и объяснить, почему * этот * вопрос особенный и другой, и на него еще не ответили? – Shepmaster
Я уже видел многие из них, но проблема здесь в основном я не понимаю. _why_ У меня есть эта ошибка, и, увидев, что другой пост мне не помогает. –
Я также видел многие из них, и проблема объясняется в одном. - Посмотрите, насколько это полезно, когда вы не указываете, что не так * с * любым * из существующих вопросов? Если вы не скажете нам, что не так, мы просто повторим тот же ответ, который вы уже не понимаете, вам не помогут, и, что еще хуже, будет еще один ответ, что следующий человек не будет читать и вместо этого игнорировать и просить, чтобы их код был исправлен. – Shepmaster