RackUnit check-eq?对于相等的字符串返回false

时间:2018-11-19 19:28:16

标签: racket rackunit

对于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?合约的内容,因此我认为在与文字字符串进行比较时,它应该起作用。

1 个答案:

答案 0 :(得分:3)

哦,好像我混在一起了eq?equal? ...

eq?通过内存引用进行比较。

宽容的是更长的equal?,它大致按值比较。

文档和往常一样explain this很好。 Here进一步了解eq?equal?及其奇怪的朋友eqv?