在scala中使用None或EmptyMyObj?

时间:2014-02-05 16:00:23

标签: scala nonetype

我理解None的概念 我也理解拥有MyObjMyEmptyObj有多好,但我无法弄清楚何时使用None代替MyEmptyObj以及何时使用{{ {1}}代替MyEmptyObj。此外,我倾向于不希望看到返回None的方法使我的代码变得混乱,我更愿意返回Option[MyObj],然后无缝调用其MyObj等方法,因此MyObj.toJson将知道要代表自己,而不是MyEmptyObj.toJson你对整个主题有什么看法? 另一方面,我可以说case None: return some empty jsonNone等相得益彰,可以选择哪个?

何时到flatMap

何时到None

1 个答案:

答案 0 :(得分:3)

没有默认值时,

None很棒,但如果你有默认值,请务必使用它。

作为一个非常简单的例子,如果你想定义一个名为amountOwed的函数,你可以这样做:

def amountOwed(bill: Int, alreadyPaid: Option[Int]): Option[Int] = {
  val owed = bill - alreadyPaid.getOrElse(0)
  if(owed == 0) None // nothing to pay!
  else Some(owed)
}

但这比它需要的要复杂得多(而且很烦人),因为0完全有道理,因为“没有付出任何代价”和“不欠任何东西”:

def amountOwed(bill: Int, alreadyPaid: Int): Int = {
  bill - alreadyPaid
}