在Clojure中使用关键字作为地图键有什么好处?
我注意到,在Clojure中,在地图中使用关键字作为键是很常见的,而在其他没有这种概念的语言中,使用字符串是很常见的 使用关键字而不是字符串或其他类型有什么好处在Clojure中使用关键字作为地图键有什么好处?,clojure,Clojure,我注意到,在Clojure中,在地图中使用关键字作为键是很常见的,而在其他没有这种概念的语言中,使用字符串是很常见的 使用关键字而不是字符串或其他类型有什么好处 关键字是一种符号类型,在语义上区别于字符串,具有较小的可表示值范围。而不是在JSON中使用等效的字符串键 关键字是内部的,因此关键字的所有实例都引用相同的对象。这对于平等性检查非常有用 关键字是函数,其作用类似于get,其本身作为关键参数。这对于“我想要所有这些人的电话号码”(map:phone no people)和(map#(get
get
,其本身作为关键参数。这对于“我想要所有这些人的电话号码”(map:phone no people)
和(map#(get%”“phone no”)这样的情况非常方便。
let
和其他解构工具:
(let[{:keys [foo bar]} {:foo 1 :bar 30}]
(+ foo bar)) ;;=>31
但这实际上也适用于使用不太常见的
:strs
解构的字符串键 而且,作为键,关键字的速度比字符串快。您不需要计算散列并执行比较,就像您(我认为)对字符串所做的那样,代价是无限的。这是从(2)中得出的结论。clojure 1.7不再适用,请参阅它已被删除,以使符号创建更具性能。