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)
这一功能可能对我在脑海中考虑的具体用例很有用。这个功能可以在数据驱动的关系数据建模领域特定数据结构语言中定义简短的语法,以明确的外键映射,其中#{:attr1 :attr2}
可以用作{:attr1 :attr1, :attr2 :attr2}
的快捷方式。