失败案例返回类型为Java void的模式匹配

Cor*_*ein 0 testng scala

在我的测试中,我的代码如下所示:

val myVar = getVar() match {
  case Some(v) => v
  case None => fail() // TestNG
}
// more testing on myVar
...

// TestNG
public static void fail() { ... }
Run Code Online (Sandbox Code Playgroud)

问题是myVar被分配了类型Any.处理这种情况的最佳方法是什么?

Jam*_*Iry 6

首先进行一些与您的环境匹配的设置(ish)

scala> def fail(): Unit = throw new RuntimeException("blah")
fail: ()Unit

scala> def getVar(): Option[String] = Some("hello")
getVar: ()Option[String]
Run Code Online (Sandbox Code Playgroud)

现在编写一个返回Nothing而不是Unit的适配器

scala> def myFail(): Nothing = {fail(); ???}
myFail: Nothing
Run Code Online (Sandbox Code Playgroud)

并且代码在使用适配器时按预期工作

scala> val myVar = getVar() match {
 | case Some(v) => v
 | case None => myFail()
 | }
myVar: String = hello
Run Code Online (Sandbox Code Playgroud)

顺便说一下,这可以写得更干净

scala> val myVar = getVar() getOrElse myFail()
myVar: String = hello
Run Code Online (Sandbox Code Playgroud)

有关单元类型及其与void的关系的 更多信息http://james-iry.blogspot.com/2009/07/void-vs-unit.html有关Nothing类型的更多信息http://james-iry.blogspot.com/ 2009/08 /获取到自下而上的什么-AT-all.html