首页 > 解决方案 > 在单个匹配语句中设置和返回可选属性

问题描述

我有以下代码做两件事:

  1. 如果未设置,则设置可选属性

  2. 获取[借用的引用]属性的值(应该设置)

这是代码:

struct Object {
    property: Option<String>,
}

fn main() {
    let mut object = Object { property : None };

    /* other code */

    match object.property {
        None => {
            object.property = Some(String::from("Hello"));
        },
        Some(_) => (),
    };

    let property = match &object.property {
        None => panic!("property should be set"),
        Some(property) => property,
    }

    /* other code */
}

我试图将这两个步骤合二为一,但我遇到了移动值和生命周期问题。

let property = match object.property {
     None => {
         let property = String::from("Hello");
         object.property = Some(property);       //<-- property is moved into the Option struct
         &property                               //<-- issue
     },
     Some(property) => &property,
 };

是否有正确的方法来重写此代码以使其编译,我猜是通过让编译器知道的生命周期property将持续与生命周期一样长object

标签: rust

解决方案


推荐阅读