首页 > 解决方案 > 使用 case/match 或 if/else 匹配空列表?

问题描述

除了样式之外,是否有任何理由应该使用 case/match 而不是 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.
  }

标签: scalapattern-matching

解决方案


蒂姆已经有了一个很好的答案,但我想换个角度看。

对于列表(或其他集合),.head并且.tail是不安全的,并且if很容易在错误的分支中意外使用它们(或根本忘记测试),同时case避免需要调用这些函数。

如果您的函数不需要调用它们并且不需要检查更复杂的条件,您也可以使用if.


推荐阅读