引用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
Run Code Online (Sandbox Code Playgroud)
我不清楚这里发生了什么.不知何故(:zombies population)
必须转变成对(get population :zombies)
吧?这究竟是如何工作的?关键字评估自身,而不是函数.读者是否注意列表中的第一件事是关键字的情况,并添加get并将关键字移动到列表的末尾?
clojure/src/jvm/clojure/lang/RT.java
以上似乎是clojure源代码中最重要的源文件之一.为了理解架构,RT代表什么?
clojure ×2