首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >球拍散列相等

球拍散列相等
EN

Stack Overflow用户
提问于 2013-04-30 01:06:15
回答 3查看 157关注 0票数 2

我一直在玩拍子和Rackunit。在将我的小静态站点生成器移植到球拍和编写单元测试的过程中,我遇到了这个奇怪的问题。

代码语言:javascript
复制
#lang racket
(require (planet esilkensen/yaml:2:1))
(require rackunit)

(define some-yaml 
  (string->yaml " - name : ding"))

(check-equal? some-yaml '(#hash(("name" . "ding"))) )

谁能给我解释一下为什么测试失败,输出如下:

代码语言:javascript
复制
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")))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-30 01:32:02

这与可变散列和不可变散列有关。以下测试将通过:

代码语言:javascript
复制
(check-equal? some-yaml (list (make-hash '(("name" . "ding")))))

其中make-hash是可变的散列构造函数。

正如Eli提到的,可变散列和不可变散列以相同的方式打印是令人困惑的,所以我报告了一个错误。

票数 4
EN

Stack Overflow用户

发布于 2013-04-30 01:30:51

源代码中的'#hash(...)被读取为不可变的散列,但是看起来库生成了一个可变的散列。(不幸的是,它们的打印格式都是一样的。)

票数 4
EN

Stack Overflow用户

发布于 2013-04-30 01:31:13

我的猜测是,string->yaml的结果是一个可变的哈希,它永远不会等于一个不可变的哈希(参见the docs)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16284324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档