我的应用程序中有这样的东西:
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
在这种情况下给我一个.
也许if ArithmeticException then 0
在Scala中有类似的东西可以删除"成功"和括号.有人可以解决一些问题吗?
我假设"除以零"只是一个例子,你无法避免抛出异常.当你可以避免抛出异常时,你应该像在这个答案中那样做.
您可以使用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
我想我会期待:
def something(x: Int, y:Int) = if ( y != 0) x/y else 0