我很好奇,为什么这个工作(如我所期望它读取the documentation on the dot special form后):Clojure的点特殊形式的怪事
(map #(. % isInstance {}) [clojure.lang.IPersistentMap])
回报:
(true)
但这并不:
(. clojure.lang.IPersistentMap isInstance {})
我得到一个错误,“没有匹配的方法:isInstance”。该表格与上面的map
函数调用完全相同,但在map
之外,它不起作用。为什么?
这个解释是正确的我只是补充说你可以强制编译器通过执行'(。(do clojure.lang.IPersistentMap)isInstance {})'(以及其他方式)来考虑类对象。 然而'''特殊形式(和'new')的级别非常低,除非你正在编写一些互操作宏,否则你不应该使用它。优先使用'.member','constructor.'和'Class/staticMember'直接使用'new'和'.'。如果你很好奇,你应该看看这些糖化形式是如何膨胀为“。”和“新”的形式的。 – cgrand