我应该使用空列表还是将其设为选项?

Should I use an empty List or make it an Option?

我的方法通常有一个可选的 List 参数。当我收到一个项目列表时,我会对它们做一些事情,否则该参数将被忽略。这是一个简单的例子。

scala> def convertToUpper(s: String, appenders: List[String] = List()) {
  (s.toUpperCase :: appenders).mkString(" ")
}

scala> convertToUpper("cory", List("asks", "questions"))
CORY asks questions

但有时我想知道这个合同是否传达了对 appenders 参数的期望,而实际上它是可选的。另一方面,将 appenders 设为 Option[List] 会增加复杂性。

当参数是 List 时避免使用 Option 是不是不好的做法,我可以只测试空而不是 None

如果一个空列表是一个有效的参数(它在你的示例中)并且它的行为与 None 一样,那么我建议不要将列表包装在一个选项中。

我会说将其包装在一个选项中表示 NoneList() 将受到不同的对待。

我认为接受列表作为参数的方法表现得像空操作是相当普遍的。