与断言相比,scala 中的假设有何含义?

2024-04-18

Scala 似乎定义了 3 种断言:assert, require and assume.

据我所知,差异(与通用断言相比)require它是专门用于检查输入(参数、传入消息等)的。是什么意思assume then?


如果你看一下代码Predef.scala你会发现这三个人的工作非常相似:

def assert(assertion: Boolean) { 
  if (!assertion) 
    throw new java.lang.AssertionError("assertion failed") 
} 

def assume(assumption: Boolean) { 
  if (!assumption) 
    throw new java.lang.AssertionError("assumption failed") 
} 

def require(requirement: Boolean) { 
  if (!requirement) 
    throw new IllegalArgumentException("requirement failed") 
} 

还有一些版本出于报告目的而采用额外的参数(请参阅http://harrah.github.com/browse/samples/library/scala/Predef.scala.html http://harrah.github.com/browse/samples/library/scala/Predef.scala.html).

区别在于它们抛出的异常类型和它们生成的错误消息。

然而,静态检查器可能会以不同的方式对待这三种情况。其目的是为了assert指定静态检查应尝试证明的条件,assume用于检查者可能假设成立的条件,而require指定调用者必须确保的条件。如果静态检查器发现违反assert它认为这是代码中的错误,而当require如果被违反,则假定调用者有错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与断言相比,scala 中的假设有何含义? 的相关文章

随机推荐