Clojure的一个非常出色的特性是它将集合视为函数,这意味着我们可以对其进行调用
({:a 1, :b 2} :a) => 1
(#{:a :b} :a) => :a
([:a :b :c] 1) => :b
但是,能够独立于特定类型查询这些函数的定义域和值域会更好
当前,keys
和vals
函数实现了这一点,但仅限于Map。我认为将其函数更通用一些,以便接受集合和向量,如以下示例所示是个好主意。
(keys #{:a :b}) => (:a :b)
(vals #{:a :b}) => (:a :b)
(keys [:a :b :c]) => (0 1 2)
(vals [:a :b :c]) => (:a :b :c)
我认为这个特性在以下特定情况下可能很有用,即定义一个在面向数据的数据建模 DSL 中明确的远程键映射的更简短的语法,其中#{:attr1 :attr2}
可以用作{:attr1 :attr1, :attr2 :attr2}
的快捷方式。