我有以下球拍代码。
#lang racket
(require rackunit racket/exn)
(define (string-last s)
(let ((lng (string-length s)))
(substring s (- lng 1) lng)))
(string-last "")
(check-equal? (string-last "1") "1")
(check-equal? (string-last "testing") "g")使用空字符串进行的字符串最后一次调用如预期的那样失败:
--------------------
. ERROR
name: check-exn
location: 014.rkt:12:0
substring: contract violation
expected: exact-nonnegative-integer?
given: -1
argument position: 2nd
other arguments...:
""
0
--------------------如何使用RackUnit库检查错误?
我试过了
(check-exn exn:fail? (string-last ""))以及其他几个替代exn:fail?的变体,但我没有找到合适的一个。
发布于 2020-11-02 11:06:40
check-exn需要一个没有参数的函数--一次雷击--它可以调用应该会引发异常的函数。所以正确的咒语是
(check-exn exn:fail? (thunk (string-last "")))它必须被传递一个thunk,因为否则默认的计算顺序就意味着异常在调用函数之前就会被引发,所以它永远不会捕获它。
https://stackoverflow.com/questions/64644108
复制相似问题