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