美文网首页
Scala assert

Scala assert

作者: 尘世中一介迷途小码农 | 来源:发表于2017-07-13 10:13 被阅读0次

原文:http://blog.sina.com.cn/s/blog_a3869e9a01017dcn.html

断言:

Scala里,断言对预定义方法 assert 的调用。表达式 assert(condition) 将在condition条件不成立的时候抛出 AssertionError。

assert也可带两个参数,表达式assert(condition, explanation) 会测试condition,如果条件不成立,会抛出含有指定explanation作为说明的AssertionError。explanation的类型是Any,所以可以把任何对象当作说明参数。assert方法会对传入的参数调用toString(),放在AssertionError中的字符串说明。

def above(that: Element): Element = {

val this1 = this widen that.width

val that1 = that widen this.width

assert(this1.width == that1.width)

elem(this1.contents ++ that1.contents)

}

另一种或许会使用断言的方式是在widen方法的结束处,在返回结果值之前,检查一下宽度是否正确。你可以这么做,首先把结果存在val里,然后对这个结果执行断言,并且如果断言成功,则返回val值。

不过,也可以使用 Predef 里的名为 ensuring 的方法来简化这些操作。

private def widen(w: Int): Element =

if (w <= width)

this

else {

val left = ...

val right = ...

left beside this beside right

} ensuring (w <= _.width)

由于存在隐式转换,因此 ensuring()能被用在任何结果类型上。尽管这段代码看上去好像是对widen的结果(类型Element)调用ensuring,但实际上是对Element隐式转换成的类型调用了ensuring。ensuring方法带一个函数做参数,该函数是接受一个结果类型对象并返回Boolean类型的论断函数(predicate function)。ensuring会把结果传给这个函数。如果函数返回true,ensuring将返回结果,否则,ensuring将抛出AssertionError。

例子中,论断函数是“w <= _.width”。下划线是传递给论断参数的占位符,即widen方法的结果Element。如果作为 w 被传入 widen 的宽度小于或等于结果 Element 的 width,预期函数将返回 true,于是 ensuring将返回被调用的 Element作为结果。因为这是 widen方法的最后一个表达式,所以 widen本身将返回 Element作为结果。

断言(以及ensuring检查)可以使用JVM的-ea和-da命令行标志开放和禁止。开放的时候,每个断言 被当做对使用软件运行时产生的实际数据进行的小测试。

相关文章

  • Scala assert

    原文:http://blog.sina.com.cn/s/blog_a3869e9a01017dcn.html 断...

  • Node.js的断言模块assert

    首先先引入断言assert模块 1.assert(value, message), assert.ok(value...

  • assert简单用法

    assert宏的原型定义在< assert.h>中。 原型定义: void assert(int expressi...

  • python assert作用

    python assert作用 Assert statements are a convenient way to...

  • 前端测试转载

    assert(value[,message]) assert()是assert.ok()的简写方式,两者用法一样。...

  • 初识前端测试2 -- node中的assert模块

    NodeJS 中assert模块,下面是 assert 中的一些常用API。 assert(value[, mes...

  • if与assert的区别

    assert 断言(assert)的语义: if 语义: 区别 1.assert语句仅仅在debug版本中才有效,...

  • nodejs的一些方法

    assert assert.deepEqual()和assert.equal()有点区别! 一开时我们需要这么做:...

  • 断言NSAssert

    NSAssert与assert NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是...

  • NSAssert断言

    NSAssert与assert NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是...

网友评论

      本文标题:Scala assert

      本文链接:https://www.haomeiwen.com/subject/jucwhxtx.html