Я думал, что понял разрушение, но я читал блог clojure, и это меня смутило. Если у вас есть функция, написанная как:
(defn f [& {:keys [foo bar]}]
(println foo " " bar))
Почему вы можете так называть:
(f :foo 1 :bar 2)
Моя первая мысль заключалась в том, что моя функция должна была вызываться вот так:
(f {:foo 1 :bar 2})
IllegalArgumentException No value supplied for key: {:foo 1, :bar 2} clojure.lang.PersistentHashMap.createWithCheck (PersistentHashMap.java:89)
Но, очевидно, это не работает. Я думаю, что это как-то связано с тем, как работает &
. Но я всегда думал, что вещь после него - вектор, и поэтому вам придется разрушить что-либо после него, как вектор.
Может кто-нибудь объяснить мне, как/почему это определение работает так, как оно делает? Благодаря