【问题标题】:Perform Rust type conversion without unwrapping Option在不展开选项的情况下执行 Rust 类型转换
【发布时间】:2021-11-18 22:10:32
【问题描述】:

有没有比解包更优雅的方式将选项枚举转换为选项整数?

enum SomeEnum {
    Item1 = 0,
    Item2 = 1
}

fn main() {
    let value = SomeEnum::Item1;
    let option_integer: Option<i16> = value.into();
}

不满足特征绑定std::option::Option&lt;i16&gt;: From&lt;std::option::Option&lt;SomeEnum&gt;&gt;

这可行,但我认为此代码不必要的样板:

enum SomeEnum {
    Item1 = 0,
    Item2 = 1
}

fn main() {
    let value = Some(SomeEnum::Item1);
    let option_integer: Option<i16> = match value {
        Some(some_enum) => Some(some_enum as i16),
        None => None
    };
}

【问题讨论】:

  • 您的第二个 sn-p 无法编译。你的意思是把value 变成Option&lt;SemeEnum&gt;
  • (value as i16).into() 呢?
  • Option::from(value as i16)
  • 您的代码与您的描述和错误消息都不匹配。对于这两个样本,我们应该阅读let value = Some (SomeEnum::Item1); 吗?

标签: rust enums


【解决方案1】:

您可以使用Option::map 创建不同类型的Option,将函数应用于Option 中包含的值:

let option_integer = value.map(|x| x as i16);

【讨论】:

  • 它会要求你指定类型,比如Option::from(value).map(|x| x as i16)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多