Scala:像Option(Some,None)之类的东西,但有三种状态:Some,None,Unknown

Ale*_*ack 6 scala nullable option

我需要返回值,当有人要求值时,告诉他们三件事之一:

  1. 这是价值
  2. 没有价值
  3. 我们没有关于此值的信息(未知)

案例2与案例3略有不同.示例:

val radio = car.radioType
Run Code Online (Sandbox Code Playgroud)
  1. 我们知道价值:返回收音机类型,说"先锋"
  2. 湾 没有价值:返回无
  3. C.我们缺少关于这辆车的数据,我们不知道它是否有收音机

我以为我可以扩展scala的None并创建一个Unknown,但这似乎不可能.

建议?

谢谢!

更新:

理想情况下,我希望能够编写如下代码:

car.radioType match { 
   case Unknown => 
   case None => 
   case Some(radioType : RadioType) => 
}
Run Code Online (Sandbox Code Playgroud)

Mit*_*ins 13

这是一个准确的实现.您可能希望查看一些铃声和口哨的Option类的源代码:

package example

object App extends Application {
  val x: TriOption[String] = TriUnknown

  x match {
    case TriSome(s) => println("found: " + s)
    case TriNone => println("none")
    case TriUnknown => println("unknown")
  }
}

sealed abstract class TriOption[+A]
final case class TriSome[+A](x: A) extends TriOption[A]
final case object TriNone extends TriOption[Nothing]
final case object TriUnknown extends TriOption[Nothing]
Run Code Online (Sandbox Code Playgroud)


psp*_*psp 8

不要告诉任何我建议的人,但你总是可以使用null来表示Unknown,而不是写一个新类.

car.radioType match { 
   case null => 
   case None => 
   case Some(radioType : RadioType) => 
}
Run Code Online (Sandbox Code Playgroud)

  • 这听起来简单但亵渎:) (2认同)

Dan*_*ral 5

你可以从Lift:the Box中获取一些东西.它有三种状态,Full,Failure和Empty.此外,Empty和Failure都从EmptyBox继承.