除了样式以外,是否有任何理由应该使用大小写/匹配而不是if / else来匹配空列表?例如:
val a: List
def compute: Int =
if (a.isEmpty) 0
else a.sum
与
def compute: Int =
a match {
case Nil => 0
case _ => a.sum // This is bad. For sake of illustration only.
}
答案 0 :(得分:3)
如果您只是测试为空/不为空,那么几乎没有选择,if
可能更有意义。有多个选项时,match
会开始播放:
a match {
case Nil => 0
case hd::Nil => 1
case hd::tl => 2
}
通常,您可以通过使用适当的方法来避免或至少推迟此测试。例如,take(1)
处理一个空列表,而head
将失败。并且headOption.map(...)
可用于安全地处理第一个元素(如果存在)。
答案 1 :(得分:3)
蒂姆(Tim)已经有了一个很好的答案,但是我想对它提出一个稍微不同的角度。
对于列表(或其他集合),.head
和.tail
是不安全的,并且if
使得很容易在错误的分支中意外使用它们(或者根本忘记测试) ,而case
则无需调用这些函数。
如果您的函数不需要调用它们并且不需要检查更复杂的条件,则也可以使用if
。