E1041#
闭合的字典模式
MoonBit 的字典模式匹配语法不支持闭合的模式(即要求字典中不能包含其他未被匹配的字段)。所以字典模式必须包含 ..
来忽略余下的字段,否则编译器会发出一个警告。
错误示例#
fn f(map : Map[String, Int]) -> Unit {
match map {
// 这一行会匹配字典中包含 "x" 和 "y" 以外的字段的情况
{ "x": x, "y": y } => println(x + y)
_ => ()
}
}
test {
f({ "x": 1, "y": 2, "z": 3 })
}
建议#
如果预期的语义是开放的匹配(允许存在其他未被匹配的字段),那么向模式中添加
..
即可。如果预期的语义是闭合的匹配,可以用模式匹配中的卫语句来实现:
fn f(map : Map[String, Int]) -> Unit { match map { { "x": x, "y": y, .. } if map.size() == 2 => println(x + y) _ => () } }