enums - Rust:在没有其他模式匹配的情况下获得枚举值的所有权
问题描述
问题在评论中。Expensive
是一个没有实现的结构Copy
,或者复制成本太高。
更新:替换Option
为用户枚举Internal
。
enum Internal {
Type1(Expensive),
Type2(String),
Empty,
}
struct Foo {
value: Internal,
}
impl Foo {
fn exec(&mut self) -> Result<Expensive, String> {
if let Internal::Type1(_) = &self.value {
let value = std::mem::take(&mut self.value);
// QUESTION: how do I avoid this pattern matching since we know the value must be Internal::Type1
return match value {
Internal::Type1(e) => Result::Ok(e),
_ => Result::Err(String::from("Impossible")),
};
}
// Some other logic that will use self.value
}
}
解决方案
您可以利用Option::take
使代码更短:
if let Option::Some(value) = self.value.take() {
return Ok(value);
}
推荐阅读
- java - 如何获取项目之间的所有路径
- angular - 在带有模板的 Angular ng-bootstrap 模态中,关闭和关闭按钮不起作用
- mongodb - Mongodb $external 数据库无法创建具有用户定义角色的新用户
- testing - Perl6 通用代码来测试模块是否加载
- shell - Ansible vmware_vm_shell SED 命令添加额外字符
- react-native - 如何从另一个屏幕重新安装屏幕?(使用新参数再次刷新整个应用程序)
- javascript - 为什么我可以将脚本添加到 package.json 中的脚本?
- spring - Spring SAML:除了使用 /saml/metadata 端点之外生成 SP 元数据的替代方法
- android - 如何使用 Android 的应用内更新 API?
- druid - 我的问题是关于德鲁伊实时摄取