你能解释一下吗?我不明白,为什么几乎相同的点特殊形式和恒等函数的代码却有不同的结果?
(. System getProperties) # => {"key" ...}
(. (clojure.core/identity System) getProperties) # => (err) No matching field found: getProperties for class java.lang.Class
我尝试比较一下:
(= (clojure.core/identity System) System) # true
结果为真
静态方法很特殊。
在第一种情况下,编译器认为
System
是一个类,并将 .
视为静态方法调用 (source)。
在第二种情况下,它将
.
视为对某个类的实例的常规调用,并且 System
是类 Class
的实例,因此会出现该错误。