E4082

E4082#

变量并非在所有模式中都是绑定的。

在模式中使用 | 操作符时,所有变量都必须在所有模式中绑定。如果某个变量没有在所有模式中绑定,那么模式匹配时它会成为自由变量,这是不允许的。

错误示例:#

///|
priv enum E {
  A(Int, Double)
  B(Int)
}

///|
fn f(value : E) -> Unit {
  match value {
    A(a, _) | B(_) => println(a)
  }
}

建议#

///|
priv enum E {
  A(Int, Double)
  B(Int)
}

///|
fn f(value : E) -> Unit {
  match value {
    A(a, _) | B(a) => println(a)
  }
}

///|
fn use_second(value : E) -> Unit {
  match value {
    A(_, b) => println(b)
    B(_) => ()
  }
}

///|
test {
  f(A(1, 2.0))
  f(B(1))
  use_second(A(1, 2.0))
}