斯卡拉:除以零

 癫逼 发布于 2023-02-02 19:31

我的应用程序中有这样的东西:

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中有类似的东西可以删除"成功"和括号.有人可以解决一些问题吗?

2 个回答
  • 我假设"除以零"只是一个例子,你无法避免抛出异常.当你可以避免抛出异常时,你应该像在这个答案中那样做.

    您可以使用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允许您转换FailureSuccess.

    您也可以将您TryOption返回"无结果"没有表现出异常:

    def something(x: Int, y: Int): Option[Int] = Try(x/y).toOption
    

    2023-02-02 19:33 回答
  • 我想我会期待:

    def something(x: Int, y:Int) = if ( y != 0) x/y else 0
    

    2023-02-02 19:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有