我无法将std::num::TryFromIntError用作TryFrom实现中的默认错误。是预期的问题,还是文档问题/错误。

#![feature(try_from)]
use std::convert::TryFrom;
use std::num::TryFromIntError;

enum MyEnum {
    A,
    B,
    C,
}

impl TryFrom<u16> for OpCode {
    type Error = TryFromIntError;
    fn try_from(val: u16) -> Result<Self, Self::Error> {
        match val {
            0 => Ok(MyEnum::A),
            1 => Ok(MyEnum::B),
            2 => Ok(MyEnum::C),
            _ => Err(TryFromIntError),
        }
    }
}

编译因以下原因而失败:
error[E0423]: expected function, found struct `TryFromIntError`
  --> src/main.rs:18:22
   |
18 |             _ => Err(TryFromIntError()),
   |                      ^^^^^^^^^^^^^^^ constructor is not visible here due to private fields

最佳答案

TryFromIntError是具有私有(private)字段的元组结构(因此在文档中为(_))。该类型没有公开任何构造实例的方法(例如new方法或Default实现),因此无法直接实例化该类型。也许是因为将来可能会增加向错误添加详细信息的可能性(目前,唯一的私有(private)字段是(),因此错误没有详细信息)。

关于rust - TryFromIntError用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54374979/

10-11 18:33