gpt4 book ai didi

enums - 修改选项的值并获取引用

转载 作者:行者123 更新时间:2023-11-29 08:30:34 25 4
gpt4 key购买 nike

我有一个可变变量作为一个选项,我想:

  • 只有当它是 None 时才用 Some 替换它(而且我不想在所有情况下都传递默认值,因为它已经是 Some 因为它涉及分配)
  • 然后获取对包含值的引用

现在,我关注了这个 model , 在伪代码中:

match myvar {
None => myvar = Some(…),
_ => ()
}
match myvar {
Some(ref mut inner) => { /* process */ }
_ => unreachable!()
}

我不觉得必须进行两次匹配(我希望编译器可以优化它)并具有这种“无法访问”,这是必需的,因为我需要返回对内部值的引用(并且在 None 的情况下,这是不可能的)。

你知道另一种方法吗?我希望 Option 上有一种方法可以一次性完成,但 Option 只是一个枚举,在任何枚举上使用它都不容易。

关于这个问题的一些背景

我做了一棵字符树。

struct Node {
children : Option<HashMap<char, Node>>
}

因此,如果我在我的树中插入一个文本,第一个字符位于树的第一层,第二个字符位于第二层,依此类推……如果我插入字符串“phone”和“phony”,它们将在层次结构中有 4 个共同节点。

首先,我直接使用了 HashMap(没有选项)。但是我不想为叶子分配一个无用的Hashmap。所以我使用了一个选项,在添加叶子时我放了一个无。然后,在进一步插入字符串时,我不得不用具有 HashMap 的 Some 替换 None。

最佳答案

这是对 A.B. 的回答的轻微扩展:

fn main() {
let mut a = Some("defg".to_string());

a = a.or_else(|| Some("abcd".to_string()));
let r = a.get_mut_ref();

println!("{}", r);
}

( try it out )

我怀疑您是否能够做更简洁的事情。

关于enums - 修改选项的值并获取引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24973594/

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