我的应用程序中有类似的内容:
def something(x: Int, y: Int) Z {
(x / y)
}
现在,如果someval不是数字(意味着x或y等于0),那么我希望Z变为0而不是显示错误([ArithmeticException: Division by zero]
)
我知道我能做到:
Try(someVale) orElse Try(0)
然而,这会给我Success(0)
,而我只是想在这种情况下给我一个0
。
也许在Scala中有类似if ArithmeticException then 0
的东西,或者删除“成功”和括号的东西。有人可以解决一些问题吗?
答案 0 :(得分:12)
我假设“除以零”只是一个例子,你无法避免抛出异常。如果你可以避免抛出异常,你应该像this answer一样。
您可以在getOrElse
上使用Try
方法代替orElse
:
def something(x: Int, y: Int) = Try(x/y).getOrElse(0)
如果您只想在ArithmeticException
上恢复,可以使用recover
方法和get
:
def something(x: Int, y: Int) =
Try(x/y).recover{ case _: ArithmeticException => 0 }.get
使用方法get
如果Try
为Failure
,您将获得例外,但recover
允许您将Failure
转换为Success
您还可以将Try
转换为Option
以返回“无结果”而不显示异常:
def something(x: Int, y: Int): Option[Int] = Try(x/y).toOption
答案 1 :(得分:12)
我想我会期待:
def something(x: Int, y:Int) = if ( y != 0) x/y else 0
答案 2 :(得分:4)
抓住异常并返回0是最简单的方法。
def something(x: Int, y: Int) = try {
(x / y)
} catch {
case ae: java.lang.ArithmeticException => 0
}
运行它:
scala> something(1,0)
res0: Int = 0
scala> something(2,1)
res1: Int = 2