Ответ 1
Да, много clojure сломается, если это изменится.
Карты хранятся в виде деревьев, и обе функции выполняют одно и то же дерево в том же порядке.
Можно ли полагаться на
(= 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]))
Да, много clojure сломается, если это изменится.
Карты хранятся в виде деревьев, и обе функции выполняют одно и то же дерево в том же порядке.
Я могу подтвердить (официально), что ответ на этот вопрос да. Докстры для keys
и vals
были обновлены в Clojure 1.6, чтобы упомянуть об этом (см. http://dev.clojure.org/jira/browse/CLJ-1302).