假设我想使用Scala的模式匹配编写以下函数:
def foo(num: Int): Int = {
num match {
case 1 => 0
case x if x%2 == 0 => 1
case _ => _
}
}
但当然我收到了行case _ => _
我知道我可以通过将行改为类似case x=>x
来解决它,但为什么Scala的模式匹配不允许我这样做?这对我来说就像是说我不在乎那里的东西只是归还它。
答案 0 :(得分:10)
因为它没有意义。 case _
表示“匹配任何内容但不将值分配给符号”,但=> _
应该是什么意思?如果你不在乎它是什么意思,这是否意味着编译器只能输入一个随机值?
case x => x
会热切地匹配所有内容并返回相同的值。它清晰,简洁,与你想要的角色数量相同。阅读它的任何人都可以理解发生了什么。你可以将其翻译为“我不关心那里有什么,只需匹配并返回它”。