vector - 是否可以在 Rust 中的(嵌套)Vec 上进行模式匹配?
问题描述
一个库为我提供了一个我想匹配的深度嵌套的数据结构。它在内部包含Vec
s。我想要像注释掉的行之一这样的东西:
struct Foo {
bar: Vec<bool>,
}
let foo = Foo {
bar: vec![true, false],
};
match foo {
// Foo{bar:[true,false]} => Ok(()), // expected an array or slice, found Vec<bool>
// Foo{bar:&[true, false]} => Ok(()), // expected struct `Vec`, found reference
// Foo{bar:vec![true,false]} => Ok(()), // Arbitrary expressions aren't allowed in patterns
Foo { bar: v } => match v.as_slice() {
[true, false] => Ok(()),
_ => bail!("match failed!"),
}, // Ugly when nesting deeply
_ => bail!("match failed!"),
}
match 语句可以分成更小的部分,首先对匹配的值进行一些解引用/解包,首先将其转换为切片。我目前正在我的代码中执行此操作,但它非常难看,并且模糊了被解构事物的结构。
问题在于Vec
标准库中,而不是语言的一部分,但我仍然希望有一些模式匹配魔法可以解决这个问题。
解决方案
推荐阅读
- python - 如何从熊猫数据框中获取同一行(上一列)的前一个值?
- autodesk-forge - Autodesk Forge - 发布作业 - 文件必须位于存储桶和正确的 URN 中
- android - RecyclerView 未显示在 ConstraintLayout 中
- java - Spring-boot 为初始 lucene 索引创建休眠搜索类
- rust - 如何让借用检查器知道参考不再存在?
- python - 我们如何通过提供数据框的函数使用回调在 Dash Table 中动态创建数据列
- javascript - 如何解决 React Native 中出现“folly/Portability.h”和“File .../main.jsbundle 不存在”的问题?
- r - ggplot里面的for循环
- angular - Angular 7 服务器响应未显示在列表中
- c++ - 如何使用访问者模式编写包含?[简单示例]