在我的测试中,我的代码如下所示:
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.处理这种情况的最佳方法是什么?
首先进行一些与您的环境匹配的设置(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
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |