假设我有一个使用关键字作为键的 clojure 映射:
(def my-car {:color "candy-apple red" :horsepower 450})
我知道我可以通过使用关键字或映射作为函数并将另一个作为其参数来查找与关键字关联的值:
(my-car :color)
; => "candy-apple red"
(:color my-car)
; => "candy-apple red"
我意识到这两种形式在某些情况下都可以派上用场,但是其中一种形式是否被认为更适合如上所示的直接使用?
(:color my-car)
是相当标准的。造成这种情况的原因有几个,我不会一一详述。但这里有一个例子。
Because :color
是一个常数,并且my-car
不是,hotspot完全可以内联动态调度color.invoke(m)
,它不能这样做m.invoke(color)
(在一些java伪代码中)。
如果这样的话那就更好了my-car
有时碰巧是一条记录color
字段而不是普通映射:clojure 编译器可以发出代码来检查“嘿,如果my-car
是 CarType 的一个实例,然后返回my-car.color
;否则进行所有复杂、缓慢的哈希图查找。”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)