为什么要将Scala Option嵌入其中?

时间:2015-04-30 15:07:14

标签: scala

我刚看到有人想要使用以下结构:

val x: Option[Option[Int]] = Some(None)

有人可以提供一个有用的例子吗?

2 个答案:

答案 0 :(得分:5)

示例:打开文件并从中读取Int的函数。

  • 如果没有文件,您将获得None
  • 如果有文件但内部没有整数,您将获得Some(None)
  • 如果有一个包含123的文件,您将获得Some(Some(123))

答案 1 :(得分:4)

我们可以将它放在Scala Map[String, Int]的上下文中。

Map("a" -> Option(1), "b" -> None)

m.get(key)有三种可能的输出类型。

如果密钥存在并且有值,我们会得到Some(Some(1))

scala> m.get("a")
res28: Option[Option[Int]] = Some(Some(1))

如果密钥存在但没有值,我们会得到Some(None)

scala> m.get("b")
res29: Option[Option[Int]] = Some(None)

如果密钥根本不存在,我们会得到None

scala> m.get("c")
res30: Option[Option[Int]] = None

这在您需要编码三种状态的情况下非常有用:

  • 存在值
  • 无价值存在
  • 不存在

大多数时候我们(I)不关心第二个条件,所以我们崩溃到Option[Int],但它仍然有用。