2013-07-21 2 views
0

Я пытаюсь проверить алгоритм, который создает HashDict, но я не могу получить свой «ожидаемый» фактически равным моим «фактическим». Например,Как сравнить литерал Dict с построенным Dict?

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. Как я могу сделать их равными?

ответ

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/

+0

Это, безусловно, работает. Благодарю. К сожалению, это означает, что мои тестовые примеры не дают очень информативных сообщений об ошибках. –

+1

'' ключ "' это не то же самое, что ': key'. Нет никакого способа сделать их равными. Вы можете конвертировать один в другой, чтобы они были одинаковыми. – Travis

Смежные вопросы