Подтвердить что ты не робот

Clojure maps: есть ключи и vals в том же порядке?

Можно ли полагаться на (= m (zipmap (keys m) (vals m))) в Clojure 1,3 +?

Если в некоторых ситуациях это поведение делает несколько более читаемый код, например

(defn replace-keys [smap m]
  (zipmap (replace smap (keys m)) (vals m)))

против.

(defn replace-keys [smap m]
  (into {} (for [[k v] m] [(smap k k) v]))
4b9b3361

Ответ 1

Да, много clojure сломается, если это изменится.

Карты хранятся в виде деревьев, и обе функции выполняют одно и то же дерево в том же порядке.

Ответ 2

Я могу подтвердить (официально), что ответ на этот вопрос да. Докстры для keys и vals были обновлены в Clojure 1.6, чтобы упомянуть об этом (см. http://dev.clojure.org/jira/browse/CLJ-1302).