Scala模式匹配默认值

时间:2017-03-28 13:17:39

标签: scala

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

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

但当然我收到了行case _ => _

的编译错误

我知道我可以通过将行改为类似case x=>x来解决它,但为什么Scala的模式匹配不允许我这样做?这对我来说就像是说我不在乎那里的东西只是归还它。

1 个答案:

答案 0 :(得分:10)

因为它没有意义。 case _表示“匹配任何内容但不将值分配给符号”,但=> _应该是什么意思?如果你不在乎它是什么意思,这是否意味着编译器只能输入一个随机值?

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

相关问题