E3018

E3018#

范围模式的边界必须是常数字面量、常量或通配符。

错误示例#

///|
fn describe(value : Int, limit : Int) -> String {
  match value {
    0..<limit => "between"
    _ => "outside"
  }
}

///|
test {
  inspect(describe(0, 3), content="between")
}

建议#

你可以将变量 a 改为一个常量:

///|
const A = 3

///|
fn describe(value : Int) -> String {
  match value {
    0..<A => "between"
    _ => "outside"
  }
}

///|
test {
  inspect(describe(0), content="between")
}

或者,你可以直接使用常数字面量:

///|
fn describe_literal(value : Int) -> String {
  match value {
    0..<3 => "between"
    _ => "outside"
  }
}

///|
test {
  inspect(describe_literal(0), content="between")
}

或者,你可以使用一个通配符:

///|
fn describe_wildcard(value : Int) -> String {
  match value {
    0..<_ => "non-negative"
    _ => "negative"
  }
}

///|
test {
  inspect(describe_wildcard(0), content="non-negative")
}

注意:使用通配符会改变这个范围模式的含义。