2014-03-02 4 views
1

Elixir новичок здесь. Этот вопрос будет коротким и сладким!Зачем использовать HashDict над Dict?

Я учусь Эликсир через делать онлайн упражнения по программированию и получил следующий совет о недавнем представлении:

В общем, лучше использовать Dict.foo вместо HashDict.foo если возможно. Функции Dict работают со всеми типами словарей, поэтому, если ваш код изменен, у вас будет меньше мест для обновления.

Что заставило меня понять, что я понятия не имею, когда вы должны использовать HashDict над Dict. Какие особые достоинства у вас есть?

ответ

4

HashDict совпадает API Dict, потому что HashDict реализует Dict.Behaviour. Рекомендация использовать API Dict для HashDict's заключается в том, что в целом всегда рекомендуется кодировать интерфейс вместо реализации, где Dict в этом случае является интерфейсом, а HashDict - это реализация этого интерфейса.

Я также не уверен в отношении точки Sasa относительно производительности, возможно, это вызывает беспокойство, но я почти на 100% уверен, что в целом вам следует больше беспокоиться о , как вы используете Dict, а не как вы к нему обращаетесь.

+0

Хороший ответ! HashDict - это конкретная реализация Dict.Behaviour. Скорее всего, произойдет потеря производительности, из которой вы используете конкретную реализацию, а не какой-либо модуль в диспетчере функций. Используя Dict, вы можете изменить, какую реализацию вы используете, не меняя никакого кода доступа. – Grimless

3

Единственный случай использования, о котором я могу думать, это оптимизация производительности. Dict функции должны решить целевой модуль во время выполнения, а затем перенаправить вызов на этот модуль. Вызов HashDict напрямую преодолевает этот шаг.

Я уверен, что в подавляющем большинстве ситуаций это различие не имеет значения. Но если у вас есть случай, когда каждая микросекунда рассчитывает, и вы выполняете частые звонки в Dict, вы можете получить некоторую скорость, позвонив напрямую HashDict. Лично я бы измерил, прежде чем делать это.

Так Короче говоря, Dict должна служить вам в 99,9999999% случаев :-) API

+0

Очень интересно. По какой-то причине концепция HashDict была сильно нажата на раннее упражнение, поэтому я как бы катался с этим. Похоже, что я, вероятно, всегда использовал Dict (по крайней мере, пока не найду фактическую причину не быть!) – thesunneversets

+0

Возможно, HashDict использовался в упражнении, чтобы избежать путаницы новичков, которая может произойти, когда HashDict.new используется для создания a dict, но Dict используется для управления им. – sasajuric