我需要返回值,当有人询问值时,告诉他们以下三件事之一:
1.这里是值
1.没有值
1.我们没有关于此值的信息(未知)
情况2与情况3有细微的不同。示例:
val radio = car.radioType
1.我们知道它的价值:返回无线电类型,说“先锋”
- B.没有值:返回无
- c.我们缺少关于这辆车的数据,我们不知道它是否有收音机
我想我可能会扩展scala的None并创建一个Unknown,但这似乎不可能。
建议?
谢谢!
更新日期:
理想情况下,我希望能够编写这样的代码:
car.radioType match {
case Unknown =>
case None =>
case Some(radioType : RadioType) =>
}
7条答案
按热度按时间0wi1tuuw1#
下面是一个基本的实现。您可能希望查看Option类的源代码以了解一些附加功能:
r7knjye22#
不要告诉任何人这是我的建议,但是你可以总是使用null来表示Unknown,而不是编写一个新的类。
iqih9akk3#
你可以从电梯里拿些东西:Box。它有三种状态:Full、Failure和Empty。此外,Empty和Failure都继承自EmptyBox。
o2gm4chl4#
可以使用scala.Either。使用Left表示例外值,使用Right表示期望值,在本例中,期望值可以是Option:
1rhkuytd5#
你可以用这三种可能性来创建你自己的。或者像你的一辆车一样。radioType类型你可以有未知的,然后在你的case上使用guards来处理它。如果你自己滚动,你应该也包括Product特性。liftweb有Box类型,这是一个选项close,允许full、empty和erorr发生。
v8wbuo2f6#
我做了一些类似的分类3行类型在给定的文件中,一个给定的行可能,例如,
Float
为标题行,Long
为中间行(行),或String
为尾部行.也isHeader
,isRow
和isTrailer
可以用来知道哪一个是.希望有帮助:iugsix8n7#
在Scala 3中,您可以像这样使用联合类型:
请参阅https://docs.scala-lang.org/scala3/book/types-union.html