Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在scala中使用None或EmptyMyObj?_Scala_Nonetype - Fatal编程技术网

在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
}