E0095

E0095#

警告名称:nan_pattern

模式使用了值为 NaN(非数)的浮点常量。NaN 不等于任何值,包括它自身,因此此模式永远无法匹配。此警告默认启用。

错误示例#

///|
const Infinity : Double = 1.0e308 * 1.0e308

///|
const NaN : Double = Infinity - Infinity

///|
pub fn describe(value : Double) -> String {
  match value {
    NaN => "not a number"
    _ => "number"
  }
}

即使 value 是 NaN,也不会选择 NaN 分支。

建议#

请在匹配分支的守卫条件中调用 is_nan(),而不是使用 NaN 常量进行匹配:

///|
pub fn describe(value : Double) -> String {
  match value {
    x if x.is_nan() => "not a number"
    _ => "number"
  }
}

///|
test {
  inspect(describe(0.0 / 0.0), content="not a number")
  inspect(describe(1.0), content="number")
}