我很好奇,爲什麼這個工作(如我所期望它讀取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