在我的测试中,我的代码如下:
val myVar = getVar() match {
case Some(v) => v
case None => fail() // TestNG
}
// more testing on myVar
...
// TestNG
public static void fail() { ... }
问题是myVar
被分配了Any
的类型。处理这种情况的最佳方法是什么?
答案 0 :(得分:6)
首先进行一些设置以匹配您的环境(ish)
scala> def fail(): Unit = throw new RuntimeException("blah")
fail: ()Unit
scala> def getVar(): Option[String] = Some("hello")
getVar: ()Option[String]
现在编写一个返回Nothing而不是Unit
的适配器scala> def myFail(): Nothing = {fail(); ???}
myFail: Nothing
使用适配器时,代码按预期工作
scala> val myVar = getVar() match {
| case Some(v) => v
| case None => myFail()
| }
myVar: String = hello
顺便说一句,这可以更清晰地写成
scala> val myVar = getVar() getOrElse myFail()
myVar: String = hello
有关单元类型及其与void http://james-iry.blogspot.com/2009/07/void-vs-unit.html的关系的更多信息 有关Nothing类型的更多信息http://james-iry.blogspot.com/2009/08/getting-to-bottom-of-nothing-at-all.html
答案 1 :(得分:1)
我只想添加一个可能的答案。这使用@JamesIry描述的方法,但使用内联部分函数。它具有相同的效果,但有点短。
val myVar = getVar() match {
case Some(v) => v
case None => { fail(); ??? } : Nothing
}