引用自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 并将关键字移至列表末尾?
引文来自官方文档 http://clojure.org/data_structures#Data%20Structures-Keywords:
关键字为一个参数(映射)的 invoke() 实现 IFn,并带有可选的第二个参数(默认值)。例如 (:mykey my-hash-map :none) 与 (get my-hash-map :mykey :none) 含义相同。见得。
Clojure 可以将关键字作为函数调用,因为它实现了与函数相同的接口。对于符号来说也是如此...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)