【发布时间】:2011-08-02 16:43:46
【问题描述】:
引自Clojure 之乐,第 4.3.1 节--
因为关键字是自我评估的并提供快速的相等性检查,所以它们几乎总是在映射键的上下文中使用。使用关键字作为映射键的一个同样重要的原因是它们可以用作函数,将映射作为参数来执行值查找:
(def population {:zombies 2700, :humans 9})
(:zombies population)
;=> 2700
(println (/ (:zombies population)
(:humans population))
"zombies per capita")
; 300 zombies per capita
我不清楚这里发生了什么。不知何故,(:zombies population) 必须转换为 (get population :zombies),对吧?这究竟是如何工作的?关键字对自身求值,而不是对函数求值。读者是否会注意列表中的第一件事是关键字的情况,然后添加 get 并将关键字移动到列表末尾?
【问题讨论】:
标签: clojure