Possible Duplicate:
Why Option[T]?
引用类型提供特殊值null
意思是“缺乏值(value)”。值类型没有这样的值,这就是 C# 引入可选值类型(以及它们的特殊语法)的原因。
Scala 的 Option[T]
具有三个不同的“空”值:null
, None
和Some(null)
。在安全性和可表达性方面,这种增加的复杂性到底给我们带来了什么?我什么时候使用哪个?
最佳答案
好的 Scala 实际上只有一个空值:None
。不要使用 null
(除非是为了向后兼容现有的 Java 代码)。
关于为什么 Option[T]
有用的问题有很多答案。例如:参见this .
简短版本:
它使可选性质成为显式签名。下面清楚地表明我们期望 t
可以为“null”:
def f(t: Option[T])
您不必在操作前进行空检查:(i: Option[Int]) => i.map(_ + 1)
无论i
都可以正常工作> 是 Some(5)
或 None
,并且 保留 Option
包装器以指示输入可能是None
(因此,输出也可能是None
)。
def f(i: Option[Int]) = i.map(_ + 1)
f(Some(5)) // Some(6)
f(None) // None
您可以轻松地将它们与其他Option
或集合组合:
val a: Option[Int] = Some(1)
val b: Option[Int] = Some(6)
val c: Option[Int] = Some(5)
val d: Option[Int] = None
for(x <- a; y <- b; z <- c) yield x + y + z // Some(12)
for(x <- a; y <- d; z <- c) yield x + y + z // None
关于c# - 可选引用文献类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9754639/