在Clojure中使用关键字作为地图中的键有什么好处?

时间:2015-12-13 09:26:24

标签: clojure

我注意到在Clojure中,在地图中使用关键字作为键是很常见的,而在其他没有这种概念的语言中,通常使用字符串。

使用关键字代替字符串或其他类型有什么好处?

1 个答案:

答案 0 :(得分:5)

  1. 关键字是符号类型,在语义上与字符串区分开来,并且具有较小范围的可表示值。 They can be namespaced, there are checks for legal use of namespaces and such, and hence users can be more confident in EDN keyword keys meaning what they expect比例如{}}带有等效字符串键的JSON。
  2. 关键字是实习的,因此关键字的所有实例都指向相同的对象。这对于例如平等检查。
  3. 关键字是函数,像get一样,以自己为关键参数。这对于“我想要所有这些人的电话号码”这样的情况很方便 - (map :phone-no people)(map #(get % "phone-no") people)
  4. 使用let和其他解构工具,关键字也很方便:

    (let[{:keys [foo bar]} {:foo 1 :bar 30}]
      (+ foo bar)) ;;=>31
    

    但这确实适用于字符串键以及使用不太常见的:strs解构。