斯卡拉:除以零

时间:2014-01-14 22:42:33

标签: scala divide-by-zero

我的应用程序中有类似的内容:

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的东西,或者删除“成功”和括号的东西。有人可以解决一些问题吗?

3 个答案:

答案 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如果TryFailure,您将获得例外,但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