【发布时间】:2016-02-27 11:32:00
【问题描述】:
我在 1.7.0 和 1.8.0 上都试过了,看起来 Clojure 并没有使用 :keys 来解构映射,它的键是完全限定的。我认为这与在参数的尾部无关,因为当我切换函数参数位置时它也不起作用。
(ns foo.sandbox)
(def foo ::foo)
(def bar ::bar)
(defn normalize-vals
[mmap & [{:keys [foo bar] :as ops}]]
(println "normalize-vals " ops " and foo " foo " bar" bar))
(normalize-vals {} {foo 1 bar 2})
=> normalize-vals {:foo.sandbox/foo 1, :foo.sandbox/bar 2} and foo nil bar nil
但是;这行得通:
(defn normalize-vals
[mmap & [{a foo b bar :as ops}]]
(println "normalize-vals " ops " and foo " a " bar" b))
(normalize-vals {} {foo 1 bar 2})
=> normalize-vals {:cmt.sandbox/foo 1, :cmt.sandbox/bar 2} and foo 1 bar 2
这是缺陷吗?
【问题讨论】:
-
FWIW,Clojure 1.9 测试版对带有限定键的地图提供了额外支持:groups.google.com/forum/#!msg/clojure/UEtE1K9C7XE/5p5BJe2tAQAJ
标签: clojure