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