返回介绍

数学基础

统计学习

深度学习

工具

Scala

一、断言

发布于 2023-07-17 23:38:22 字数 2213 浏览 0 评论 0 收藏 0

  1. 断言和测试是检查代码行为符合预期的两种重要手段。

  2. Scala 中,断言是对预定义方法assert (它定义在Predef 单例对象中)的调用:assert(cond)

    如果cond 条件不满足,则该表达式抛出AssertionError 异常。

    assert 还有一个版本:assert(cond,explain) 。如果cond 条件不满足,则抛出包含给定explainAssertionError 。其中explain 的类型为Any,因此可以传入任何对象。assert 方法将调用explaintoString 方法来获取一个字符串,放入到AssertionError 中。

    
    def sqrt(n:Double) = {
        assert(n>=0)                              // 断言: n>=0
        assert(n>=0,"number must >=0: " + n)      // 提供了解释
        /* 详细实现  */
    }
  3. 除了assertPredef 还提供了ensuring 方法。该方法可以用于任何结果类型,这得益于一个隐式类型转换。

    
    
    xxxxxxxxxx
    class C(val n:Double) { def scale(factor:Double) : C = { new C(this.n * factor) ensuring (_.n >=0 ) // 这里 ensuring 采用操作符语法 /* 等价于: val c = C(this.n * factor) // 创建的对象 val f = (x:C) => x.n >= 0 // 前提条件函数 c.ensuring(f) // 返回 c 或者抛出异常 */ } }

    ensuring 方法接收一个函数参数,该函数称作前提条件函数。前提条件函数接受调用对象(即上面的 c 对象)并返回布尔类型。

    ensuring 方法将调用对象传递给这个前提条件函数,如果前提条件函数返回true,则ensuring 正常返回结果;如果返回false,则ensuring 将抛出AssertionError

  4. 断言可以通过JVM 的命令行参数-ea 打开,可以通过参数-da 关闭。打开时,断言就像是一个个小测试,用的是运行时得到的真实数据。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文