我在Scala中有这个代码,a
对象应该是值而不是变量,如何初始化a
try块中的对象?
object SomeObject {
private val a : SomeClass
try {
a=someThing // this statement may throw an exception
}
catch {
case ex: Exception=> {
ex.printStackTrace()
}
}
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*lák 22
Scala尝试避免undefined/null值.但是,如果try
失败并a
使用整个try
表达式初始化,则可以通过为案例提供返回值来解决问题:
private val a: SomeClass =
try {
someThing // this statement may throw an exception
} catch {
case ex: Exception => {
ex.printStackTrace()
someDefault
}
}
Run Code Online (Sandbox Code Playgroud)
更新:在Scala中这将是可能更习惯使用Try
的scala.util
:
val x : Int =
Try({
someThing
}).recoverWith({
// Just log the exception and keep it as a failure.
case (ex: Throwable) => ex.printStackTrace; Failure(ex);
}).getOrElse(1);
Run Code Online (Sandbox Code Playgroud)
Try
允许您以各种方式组合可能因异常而失败的计算.例如,如果您有两种类型的计算,则Try
可以调用
thing1.orElse(thing2).getOrElse(someDefault)
Run Code Online (Sandbox Code Playgroud)
thing1
如果成功,它将运行并返回其结果.如果它失败了,它会继续thing2
.如果它也失败了,返回someDefault
.您还可以使用recover
或recoverWith
使用部分函数从某些异常中恢复(并可能重用这些部分函数).
归档时间: |
|
查看次数: |
5810 次 |
最近记录: |