我一直在玩Racket和Rackunit。我正在将我的小静态站点生成器移植到Racket并编写单元测试并遇到这个奇怪的问题。
#lang racket
(require (planet esilkensen/yaml:2:1))
(require rackunit)
(define some-yaml
(string->yaml " - name : ding"))
(check-equal? some-yaml '(#hash(("name" . "ding"))) )
有人可以向我解释为什么测试失败并输出以下内容:
Welcome to DrRacket, version 5.3.3 [3m].
Language: racket; memory limit: 128 MB.
--------------------
FAILURE
name: check-equal?
location: (#<path:/home/ding/Documents/racket/blog-generator> 7 0 119 45)
expression: (check-equal? x '(#hash(("name" . "ding"))))
actual: (#hash(("name" . "ding")))
expected: (#hash(("name" . "ding")))
答案 0 :(得分:4)
'#hash(...)
被读作不可变的哈希,但看起来这个库产生了一个可变的哈希。 (不幸的是,它们的印刷都是一样的。)
答案 1 :(得分:4)
它与可变与不可变哈希有关。以下测试将通过:
(check-equal? some-yaml (list (make-hash '(("name" . "ding")))))
其中make-hash
是可变的哈希构造函数。
正如Eli所说,令人困惑的是,可变和不可变的哈希以相同的方式打印,所以我报告了一个错误。
答案 2 :(得分:3)
我的猜测是string->yaml
的结果是 mutable 哈希,它永远不会等于 immutable 哈希(参见the docs)