如何在scala中返回None?

时间:2014-01-08 13:53:46

标签: scala

我最近一直在学习Scala,我最常见的一件事是谈论你不应该如何使用null而是使用None。我不得不求助于使用null,因为我不明白None是如何工作的。

我最大的问题是当我有返回对象的方法时说:

def func: SomeObjType = {
if(something)
    new SomeObjType
else
    null or None

如果我返回null,它的效果非常好但是每当我尝试返回None时它都不起作用。

我做错了什么?

2 个答案:

答案 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 可以或多或少地互换使用。