如何将Dict文字与构造的Dict进行比较?

时间:2013-07-21 17:06:38

标签: elixir

我正在尝试测试构建HashDict的算法,但是我无法将“预期”变为实际等于我的“实际”。例如,

iex> expected = HashDict.new([ key: 12 ])
#HashDict<[foo: 12]>

iex> actual = Dict.put(HashDict.new, "key", 12)
#HashDict<[{"foo", 12}]>

我可以通过以更加钝的方式声明它来获得HashDict的第二个“样式”:

iex> HashDict.new([ { "key", 12 } ])
#HashDict<[{"foo", 12}]>

我非常喜欢我的测试用例的简单Dict文字语法,但是我的实现以递归方式构建了Dict。我怎样才能使这些相等?

2 个答案:

答案 0 :(得分:6)

在第一种情况下,键是一个原子,但在第二种情况下,它是一个字符串。

您可以在iex上执行此操作:

expected = HashDict.new([key: 12])
actual = Dict.put(HashDict.new, :key, 12)
Dict.equals? actual, expected # returns true

有关详细信息,请访问:http://elixir-lang.org/docs/stable/

答案 1 :(得分:0)

这是一个古老的问题(目前HashDict已在许多Elixir版本中弃用),但我认为我会针对当前Elixir版本对其进行更新,以防将来有人发现它。

这些天,您应该使用Map而不是HashDict。

Map文字语法可以像这样将字符串作为键来支持:

%{"foo" => 12}

当然,这与在Map文字中使用原子键不同,后者在习惯上是这样声明的:

%{foo: 12}

只是这样声明语法糖:

%{ :foo => 12 }