E0006

E0006#

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

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

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

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

错误示例#

///|
priv enum T {
  A
  B
  C
}

///|
pub fn f() -> Unit {
  match T::A {
    B => ()
    _ => ()
  }
}

建议#

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

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

    ///|
    pub enum T2 {
      A
      B
      C
    }
    
    ///|
    pub fn T2::new(value : Int) -> T2 {
      match value {
        0 => T2::A
        1 => T2::B
        _ => T2::C
      }
    }
    
  • 如果你需要在当前包之外构造“从未被构造”的枚举值,你可以给枚举值添加 pub(all) 关键字。

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

    ///|
    priv enum T4 {
      A
    }
    
    ///|
    pub fn g() -> Unit {
      match T4::A {
        A => ()
      }
    }