我一直在玩拍子和Rackunit。在将我的小静态站点生成器移植到球拍和编写单元测试的过程中,我遇到了这个奇怪的问题。
#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")))发布于 2013-04-30 01:32:02
这与可变散列和不可变散列有关。以下测试将通过:
(check-equal? some-yaml (list (make-hash '(("name" . "ding")))))其中make-hash是可变的散列构造函数。
正如Eli提到的,可变散列和不可变散列以相同的方式打印是令人困惑的,所以我报告了一个错误。
发布于 2013-04-30 01:30:51
源代码中的'#hash(...)被读取为不可变的散列,但是看起来库生成了一个可变的散列。(不幸的是,它们的打印格式都是一样的。)
发布于 2013-04-30 01:31:13
我的猜测是,string->yaml的结果是一个可变的哈希,它永远不会等于一个不可变的哈希(参见the docs)。
https://stackoverflow.com/questions/16284324
复制相似问题