对于RackUnit的check-eq?
对于相等的字符串返回false,我有些不解。
这是我正在尝试的代码:
#lang racket
(require rackunit)
(define (get-output proc)
(let ([out (open-output-string)])
(parameterize ([current-output-port out])
(proc)
(get-output-string out))))
(define output (get-output
(λ () (display "hello"))))
(check-eq? output "hello")
运行此测试会导致以下错误:
--------------------
. FAILURE
name: check-eq?
location: unsaved-editor:14:0
actual: "hello"
expected: "hello"
--------------------
我以为我了解eq?
的含义,但似乎仍然缺少某些内容……为什么会失败?
我知道get-output-string
会调用bytes->string/utf8,它返回通过string?
合约的内容,因此我认为在与文字字符串进行比较时,它应该起作用。
答案 0 :(得分:3)
哦,好像我混在一起了eq?
和equal?
...
eq?
通过内存引用进行比较。
宽容的是更长的equal?
,它大致按值比较。
文档和往常一样explain this很好。 Here进一步了解eq?
,equal?
及其奇怪的朋友eqv?
。