我最近一直在学习Scala,我最常见的一件事是谈论你不应该如何使用null而是使用None。我不得不求助于使用null,因为我不明白None是如何工作的。
我最大的问题是当我有返回对象的方法时说:
def func: SomeObjType = {
if(something)
new SomeObjType
else
null or None
如果我返回null,它的效果非常好但是每当我尝试返回None时它都不起作用。
我做错了什么?
答案 0 :(得分:8)
def func : Option[SomeObjType] = {
if (cond)
Some(new SomeObjType)
else
None
}
答案 1 :(得分:-3)
无,正如您在scaladocs here中看到的那样,是Option的扩展。它只检查您的退货类型是否应该是一个选项。
你可以改变你的代码,正如Marth建议的那样,但在实践中,如果不断使用选项会产生相当丑陋的代码。
如果您正在处理列表,则返回 Nil 将非常合适。
我个人只是返回 Nothing ,因为它听起来很酷,并且因为它的每个类的自动执行(包括 SomeObjType )使得处理起来很简单。
以下文章是关于Scala中这些缺席类型的非常有用的文章:
A Post About Nothing,作者Matt Malone
实际上,对于所有这些替代方案,对小写 null 的吸引力很小。它甚至在美学上令人愉悦的 Null 面前显得苍白无力。抛开怪癖, null 和 Null 可以或多或少地互换使用。