c# - 可选引用文献类型

标签 c# scala null nullable scala-option

Possible Duplicate:
Why Option[T]?

引用类型提供特殊值null意思是“缺乏值(value)”。值类型没有这样的值,这就是 C# 引入可选值类型(以及它们的特殊语法)的原因。

Scala 的 Option[T]具有三个不同的“空”值:null , NoneSome(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/

相关文章:

c# - 引用 Razor 类库中的类

scala - 如何发布带有校验和(MD5、SHA1)的工件?

scala - _2符号在scala语言中的含义

java - lambda 反序列化 - lambda 表达式是否总是脱糖为 Scala 的静态方法?

java - "? extends ParentClass"使只读?

c# - 在 C++ 代码中更改 Dll 的 .NET 4 运行时激活策略

c# - MVC 中的 Roxy 文件管理器不接受 session 路径

c# - 如何在方法的 XML 文档中引用其他类型的成员?

scala - 如何将可以为 null 或数组的值隐式包装到 Scala 选项中

Symfony2 - 查询生成器 LIKE 空值