gpt4 book ai didi

rust - 即使let语句之后,值仍然包裹在Option中

转载 作者:行者123 更新时间:2023-12-03 11:40:54 25 4
gpt4 key购买 nike

我有一个结构,有两个字段,州和 child 。子项是包含子项向量的选项。我正在使用if let语法来将此选项解构回向量。

fn main() {
let mut root = Node::new2d(3);
loop {
root.calc_scores(100);
if let Some(mut children) = root.children {
let child = children.pop();
root = Node {
state: child.0,
children: None,
}
}
root.make_children();
}
}
struct Node<T> {
state: T,
children: Option<Vec<(T, i32)>>,
}

上面的代码无法编译。它提示 child 是 Option<(Board2d,i32)>类型。
为什么 child 仍被包裹在一个选择枚举中? if let Some(mut children) = root.children{}不会将向量从Option枚举中取出吗?

最佳答案

pop上的 Vec method返回Option,因为Vec实际上可以为空,因此返回None,您也应该检查一下。

话虽这么说,Option<Vec<_>>并不是您经常需要的东西。仅当您确实想要空向量与根本不存在向量之间的差异时才有意义,这在这里似乎不是这种情况。所以您最终会得到如下结果:

fn main() {
let mut root = Node::new2d(3);
loop {
root.calc_scores(100);
if let Some(child) = root.children.pop() {
root = Node {
state: child.0,
children: vec![],
}
}
root.make_children();
}
}
struct Node<T> {
state: T,
children: Vec<(T, i32)>,
}

关于rust - 即使let语句之后,值仍然包裹在Option中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59916775/

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