Scala模式匹配默认值

guy*_*r86 2 scala

假设我想使用Scala的模式匹配编写以下函数:

def foo(num: Int): Int = {
    num match {
        case 1 => 0
        case x if x%2 == 0 => 1
        case _ => _
    }
}
Run Code Online (Sandbox Code Playgroud)

但当然我得到了该行的编译错误 case _ => _

我知道我可以通过改变线来解决它:case x=>x但是为什么Scala的模式匹配不允许我做那样的事情?这对我来说就像是说我不在乎什么只是归还它.

Mic*_*jac 10

因为它没有意义.case _意思是"匹配任何东西,不要将值赋给符号",但是应该=> _是什么意思?如果你不在乎它是什么意思,这是否意味着编译器只能输入一个随机值?

case x => x将热切地匹配所有内容并返回相同的值.它清晰,简洁,与你想要的角色数量相同.阅读它的任何人都可以理解发生了什么.你可以把它翻译为"我不在乎那里有什么,只需匹配并返回它".