寻找有关Clojure语法和功能的一些说明

时间:2013-12-07 22:12:12

标签: syntax clojure

这有什么区别:

(keySet (map (keyword :number) queryResult)

和此:

(keySet (map #(get % "number") queryResult)

2 个答案:

答案 0 :(得分:4)

首先,您的第一个示例中的(keyword :number)是多余的,因为keyword将其参数转换为关键字,:number已经是关键字。这将你的第一个例子简化为:

(keySet (map :number queryResult))

当关键字用作函数时,它返回第一个参数的键的关联值,如果不存在,则返回nil

user=> (:number {:a "Hi" :number 23})
23
user=> (:number {:a "Hi" :ldsf 23})
nil

因此,第一个示例返回将keySet应用于:numberqueryResult字段序列的结果。

另一方面,您的第二个示例会将keySet应用于"number"的所有queryResult字段的序列。

请注意,第一个示例会查找关键字:number,而第二个示例会查找字符串"number"

当然:number"number"

user=> (= :number "number")
false

答案 1 :(得分:0)

第一个将在queryResult的每个项目中查找关键字:number,而第二个将查找字符串"number"。您想要使用的将取决于地图中的键的类型。