В чем разница между двумя следующими формами?Есть ли [{: keys [: a]}] или [{: keys [a]}] более идиоматическое разрушение?
(defn abc [{:keys [:a]}] a)
(defn abc [{:keys [a]}] a)
Есть ли более идиоматический?
В чем разница между двумя следующими формами?Есть ли [{: keys [: a]}] или [{: keys [a]}] более идиоматическое разрушение?
(defn abc [{:keys [:a]}] a)
(defn abc [{:keys [a]}] a)
Есть ли более идиоматический?
Карта деструктурирования с помощью: ключей, которые мы обычно выполняем с символами, как в вашем втором примере.
Я не совсем уверен в этом пункте, но я думаю, что поддержка по ключевым словам в: ключи были добавлен специально для поддержки случая уничтожения того слова с пространствами имёны пространствами имен псевдонимов, то есть:
(ns (require [com.company.foo :as foo]
...))
(defn abc [{:keys [::foo/a]}] a)
' (let [{: keys [foo/a]} {: foo/a 1}] a) => 1' – OlegTheCat
Обратите внимание: foo/a и :: foo/a не совпадают. В моем случае foo является псевдонимом пространства имен. Я не знаю, изменилось ли это в более поздней версии clojure, но в прошлый раз я проверил foo: foo/a не проверяет псевдонимы (в :: он делает) – Setzer22
В 1.9 вы можете использовать '(let [ {: foo/keys [a]} #: foo {: a 1}] a); => 1'. – madstap
Я бы утверждают, что с символами (второй пример) в основном является единственным, который работает с ': syms' и': strs' (например, '(let [{: strs [" a "]} {" a "1}] a) 'fail) – cfrick