RackUnit чек-эк?возвращает false для одинаковых строк - PullRequest
0 голосов
/ 19 ноября 2018

Я немного озадачен тем, что 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 голосов
/ 19 ноября 2018

О, похоже, я перепутал eq? и equal? ...

eq? сравнивает по памяти.

Чем мягче, тем длиннее, equal?, что примерно по значению сравнивается.

Документы, как обычно, объясняют это довольно хорошо. Здесь подробнее о eq?, equal? и их странном друге, eqv?.

...