作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(check < 4 3)
在屏幕上返回一条错误消息,但函数也返回 #<void>
.我期待它只返回一个异常而不是无效的。我理解以下内容吗 racket doc错误地:
“如果条件成立,则检查评估为(无效)。如果条件不成立,则检查引发 exn:test:check 的实例,其中包含详细说明失败的信息。”
> (display (check < 4 3))
--------------------
FAILURE
name: check
location: (|interactions from an unsaved editor| 75 11 1868 13)
expression: (check < 4 3)
params: (#<procedure:<> 4 3)
. . Check failure
--------------------
#<void>
>
最佳答案
我认为您的解释是有道理的,并且文档是以一种误导的方式编写的,尽管在技术上可能并不正确。
看看实现,我认为检查总是返回 #<void>
(参见 this line)。
然而,当检查失败时,实际上会引发异常。只是默认情况下它总是被捕获并转换为错误打印输出。这意味着通常不会在 check
之外捕获异常。所以它实际上总是返回 #<void>
.
您可以通过参数化 current-check-around
来调整此行为范围。这是一个例子:
-> (require rackunit)
-> (define (my-check-around thunk)
(with-handlers ([exn:test:check? (λ (e) (raise e))])
(thunk)))
-> (parameterize ([current-check-around my-check-around])
(check < 4 3))
; Check failure [,bt for context]
raise
处理程序中的调用进一步传播异常并被 REPL 捕获。如果只是想自定义异常的处理方式,也可以参数化 current-check-handler
相反。
我对 rackunit 文档进行了修复,因此在未来的 Racket 版本中,文档应该更清楚地说明这个问题。
关于testing - racketunit 检查没有抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324304/
(check .我期待它只返回一个异常而不是无效的。我理解以下内容吗 racket doc错误地: “如果条件成立,则检查评估为(无效)。如果条件不成立,则检查引发 exn:test:check 的
我是一名优秀的程序员,十分优秀!