Если у меня есть структура, которая выглядит примерно так:
struct Thing {
opt: Option<Box<u32>>
}
fn main() {
let thing = Thing{opt:Some(Box::new(5))};
let pointer = &thing;
match pointer.opt {
None => println!("There is nothing"),
Some(thing) => println!("There is a thing {}", thing)
}
}
Я получаю сообщение об ошибке: «невозможно выйти из« pointer.opt »как вариант перечисления «Some», который находится за общей ссылкой» Может ли кто-нибудь объяснить, почему эта ошибка возникает и возможные пути ее решения?
То, над чем я работаю, требует работы со ссылкой на структуру с аналогичной опцией в ней.
Существует std::option::Option::as_ref() именно для такой ситуации:
match pointer.opt.as_ref() {
None => println!("There is nothing"),
Some(thing) => println!("There is a thing {}", thing)
}
@ user229044 да, но не совсем по тем же причинам. Если это работает, то это из-за некоторых удобств, которые предоставляет match. Добавление рефа в паттерн тоже работает.