【发布时间】:2014-09-26 17:40:09
【问题描述】:
val one: Option[Int] = None
val two = Some(2)
Option(one.getOrElse(two.getOrElse(null))) // Gives me Some(2) which I want
val one = Some(1)
val two = None
Option(one.getOrElse(two.getOrElse(null))) // Gives me Some(1) which I want
val one: Option[Int] = None
val two: Option[Int] = None
Option(one.getOrElse(two.getOrElse(null))) // Gives me None which I want
val one = Some(1)
val two = Some(2)
Option(one.getOrElse(two.getOrElse(null))) // Gives me Some(1) when I want an exception
我简要研究了 Either 类型,但它似乎是用于“表示两种可能类型之一的值”。我是否缺少一些数据结构或 Monad?本质上,我想要一个明确的(如果两者都有价值,则抛出错误)如果可用,则获取其中一个或获取 None
【问题讨论】:
-
你为什么不为此写一个函数,用模式匹配?
-
@gzou 我考虑过...我只是在检查我是否缺少预先构建的东西
-
您可以将它们包装在一个集合中:
List(Option(1), Option(2)).forall(_.isDefined)如果它返回 true,则您的所有选项都已定义并且您可以抛出异常。 -
@EndeNeu 我回答了类似的问题。感谢您的建议
-
永远不要使用 null。选项的全部意义在于避免 null 因为它更安全,如果 None 违背了类型的全部目的,则有一个选项返回 null
标签: scala monads scala-option