Vector 是否可以在生锈的(嵌套)Vec上进行模式匹配?

Vector 是否可以在生锈的(嵌套)Vec上进行模式匹配?,vector,rust,pattern-matching,Vector,Rust,Pattern Matching,一个库为我提供了一个我想要匹配的深度嵌套的数据结构。它内部包含Vecs。我希望类似于注释掉的行中的一行可以工作: structfoo{ 酒吧:Vec, } 让foo=foo{ bar:vec![对,错], }; 火柴{ //Foo{bar:[true,false]}=>Ok(()),//需要数组或切片,找到了Vec //Foo{bar:&[true,false]}=>Ok(()),//预期结构为'Vec',找到了引用 //Foo{bar:vec![true,false]}=>Ok(()),//模

一个库为我提供了一个我想要匹配的深度嵌套的数据结构。它内部包含
Vec
s。我希望类似于注释掉的行中的一行可以工作:

structfoo{
酒吧:Vec,
}
让foo=foo{
bar:vec![对,错],
};
火柴{
//Foo{bar:[true,false]}=>Ok(()),//需要数组或切片,找到了Vec
//Foo{bar:&[true,false]}=>Ok(()),//预期结构为'Vec',找到了引用
//Foo{bar:vec![true,false]}=>Ok(()),//模式中不允许使用任意表达式
Foo{bar:v}=>匹配v.as_slice(){
[true,false]=>Ok(()),
_=>保释!(“匹配失败!”),
},//深巢难看
_=>保释!(“匹配失败!”),
}
match语句可以分成更小的部分,首先对匹配的值进行解引用/解包,首先将其转换为一个切片。我目前正在我的代码中这样做,但是它非常丑陋,并且模糊了正在被分解的东西的结构

问题是
Vec
在标准库中,不是语言的一部分,但我仍然希望有一些模式匹配魔法可以解决这个问题。

不,当前不支持模式匹配Vec(更不用说就地)。目前,锈迹只支持某种有限形式的腐蚀,甚至是最近的腐蚀(1.42)

您可以使用其他一些生锈工具使代码略为简洁,但仅此而已,例如,
if let

匹配foo{
Foo{bar:v}如果匹配!(v.as_slice(),[true,false])=>Ok(()),
_=>保释!(“匹配失败!”),
}

感谢您提及
匹配。不确定我是否会在这里使用,但我肯定会找到使用它的地方。知道我可以投票的RFC吗?无法匹配核心stdlib类型,如
Vec
String
确实会损害模式匹配。要清楚,当你提到“深度嵌套”时,你是否在Vec中的Vec中有Vec?因为这感觉有点反模式。应该可以利用Rust的类型系统,以便在“嵌套”的每一级委派匹配操作?有问题的结构来自板条箱,该板条箱使用输入向量进行建模映射。类型模式来自python代码库,该代码库在序列化端大量使用嵌套映射。