在scala中使用None或EmptyMyObj?
我理解在scala中使用None或EmptyMyObj?,scala,nonetype,Scala,Nonetype,我理解None 我也明白拥有MyEmptyObj和MyEmptyObj是多么美好,但我不知道什么时候使用None而不是MyEmptyObj更好,什么时候应该使用MyEmptyObj而不是None。我也不喜欢看到返回Option[MyObj]的方法它会把我的代码弄得乱七八糟,我更喜欢返回MyObj,然后无缝地调用它的方法,比如MyObj.toJson,因此MyEmptyObj.toJson将知道如何表示自己,而不是使用case None:返回一些空的json你对整个主题有什么看法? 另一方面,我可
None
我也明白拥有MyEmptyObj
和MyEmptyObj
是多么美好,但我不知道什么时候使用None
而不是MyEmptyObj
更好,什么时候应该使用MyEmptyObj
而不是None
。我也不喜欢看到返回Option[MyObj]的方法
它会把我的代码弄得乱七八糟,我更喜欢返回MyObj
,然后无缝地调用它的方法,比如MyObj.toJson
,因此MyEmptyObj.toJson
将知道如何表示自己,而不是使用case None:返回一些空的json
你对整个主题有什么看法?
另一方面,我可以说None
非常适合flatMap
等,那么选择哪个呢
何时执行None
当你没有默认值时,什么时候清空呢?
None
很好,但是如果你有默认值,一定要使用它
作为一个非常简单的示例,如果您想定义一个名为amounted
的函数,可以执行以下操作:
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对于“未付任何费用”和“不欠任何费用”来说都是非常合理的:
这是一个非常固执己见和主观的问题,但当我的对象不是某个容器类型时,我通常会选择
选项
,当我的对象是某个容器类型时,我会选择MyObj
。
def amountOwed(bill: Int, alreadyPaid: Int): Int = {
bill - alreadyPaid
}