gpt4 book ai didi

rust - 如果尚未设置,如何设置嵌套在多个选项中的值?

转载 作者:行者123 更新时间:2023-11-29 07:58:36 25 4
gpt4 key购买 nike

我有这样的配置设置:

#[derive(Debug, Deserialize, Serialize)]
struct Config {
defaults: Option<Default>,
}

#[derive(Debug, Deserialize, Serialize)]
struct Default {
duration: Option<Millis>,
}

#[derive(Serialize, Deserialize, Debug)]
struct Millis(u64);

具有 let cfg: &mut Config 的值,如何轻松设置该值的持续时间?

我试过这个,如果开始时没有值,它会 panic :

*cfg.default.as_mut().unwrap().duration.as_mut().unwrap() = Millis(1234)

除此之外,我还没有找到绕过那些 unwrap 来按需创建值的方法,这更冗长...

if cfg.defaults.is_none() {
cfg.defaults = Some(Default { duration: None });
}

if cfg.defaults.as_mut().unwrap().duration.is_none() {
cfg.defaults.as_mut().unwrap().duration = Some(Millis(1234));
}

执行此操作的“方法”是什么?

最佳答案

这就是get_or_insert方法用于:

#[derive(Debug)]
struct Config {
defaults: Option<Default>,
}

#[derive(Debug)]
struct Default {
duration: Option<Millis>,
}

#[derive(Debug)]
struct Millis(u64);

fn main() {
let mut config = Config { defaults: None };

config
.defaults
.get_or_insert(Default { duration: None })
.duration
.get_or_insert(Millis(0))
.0 = 42;

// Config { defaults: Some(Default { duration: Some(Millis(42)) }) }
println!("{:?}", config);
}

(link to playground)

关于rust - 如果尚未设置,如何设置嵌套在多个选项中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49416521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com