5 rust
我希望能够使用Option<NonZeroU8>其紧凑的 repr,但仍然能够使用 0。
有没有办法使用u8::MAX不可表示的值而不是 0?
有一个nonmax板条箱可以提供此功能。NonMaxU8具体看。这是有效的,因为它在内部使用NonZeroU8并在创建和方法时进行适当的转换.get()。
如果您想要不同的变体,而不仅仅是零或最大,您可以轻松制作自己的变体。nonmax 板条箱使用 XOR 策略将不可表示的值清零或使用模块化算术方法,如评论中建议的那样:
pub struct NonTenU8(NonZeroU8);
impl NonTenU8 {
    const UNREPRESENTABLE: u8 = 10;
    /// Creates a u8 value that cannot be ten.
    pub fn new(value: u8) -> Option<Self> {
        NonZeroU8::new(value ^ Self::UNREPRESENTABLE).map(Self)
        // NonZeroU8::new(value.wrapping_sub(Self::UNREPRESENTABLE)).map(Self)
    }
    pub fn get(&self) -> u8 {
        self.0.get() ^ Self::UNREPRESENTABLE
        // self.0.get().wrapping_add(Self::UNREPRESENTABLE)
    }
}
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           312 次  |  
        
|   最近记录:  |