E1006

E1006#

枚举值从未被读取,从未被构造,或两者都是。

  • 如果枚举值从未被读取,意味着它被定义但从未在模式匹配表达式中析构(matchletguard let、循环函数等)。

  • 如果枚举值 A 从未被构造,意味着没有 A(...)

  • 如果枚举值未使用,意味着它既没有被构造也没有被读取。

错误示例#

priv enum T {
  A // Warning: Variant 'A' is never read
  B // Warning: Variant 'B' is never constructed
  C // Warning: Variant 'C' is unused
}

fn main {
  match T::A {
    B => ()
    _ => ()
  }
}

建议#

  • 如果有一些枚举值从未被读取,而其他枚举值被读取,这意味着你在代码中使用了通配符模式(_)。你可以展开通配符模式以包含未使用的枚举值。

    fn main {
      match T::A {
        B => ()
        C => ()
        A => ()
      }
    }
    
  • 如果所有枚举值从未被读取,而你需要在当前包之外读取这些枚举值,你可以给枚举定义添加 pub 关键字。注意这将使枚举值的实现对包的用户可见。

    pub enum T {
      A
      B
      C
    }
    
  • 如果你需要在当前包之外构造“从未被构造”的枚举值,你可以给枚举值添加 pub(all) 关键字。

    pub(all) enum T {
      A
      B
      C
    }
    
  • 如果有一些枚举值确实没有用,你可以移除未使用的枚举值。

    enum T {
      A
      B
    }