Есть ли способ сопоставить параметры за ссылками в Rust?

Если у меня есть структура, которая выглядит примерно так:

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», который находится за общей ссылкой» Может ли кто-нибудь объяснить, почему эта ошибка возникает и возможные пути ее решения?

То, над чем я работаю, требует работы со ссылкой на структуру с аналогичной опцией в ней.

Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
БЭМ: Конвенция об именовании CSS
БЭМ: Конвенция об именовании CSS
Я часто вижу беспорядочный код CSS, особенно если проект большой. Кроме того, я совершал эту ошибку в профессиональных или личных проектах и...
Революционная веб-разработка ServiceNow
Революционная веб-разработка ServiceNow
В быстро развивающемся мире веб-разработки ServiceNow для достижения успеха крайне важно оставаться на вершине последних тенденций и технологий. По...
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Заголовок веб-страницы играет наиболее важную роль в SEO, он помогает поисковой системе понять, о чем ваш сайт.
Конфигурация Jest в angular
Конфигурация Jest в angular
В этой статье я рассказываю обо всех необходимых шагах, которые нужно выполнить при настройке jest в angular.
1
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Существует std::option::Option::as_ref() именно для такой ситуации:

match pointer.opt.as_ref() {
    None => println!("There is nothing"),
    Some(thing) => println!("There is a thing {}", thing)
}

user229044 13.02.2023 17:52

@ user229044 да, но не совсем по тем же причинам. Если это работает, то это из-за некоторых удобств, которые предоставляет match. Добавление рефа в паттерн тоже работает.

jthulhu 13.02.2023 17:58

Другие вопросы по теме