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))
}