为什么点特殊形式的代码会给出不同的结果?

问题描述 投票:0回答:1

你能解释一下吗?我不明白,为什么几乎相同的点特殊形式和恒等函数的代码却有不同的结果?

(. 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

结果为真

clojure
1个回答
0
投票

静态方法很特殊。

在第一种情况下,编译器认为

System
是一个类,并将
.
视为静态方法调用 (source)。

在第二种情况下,它将

.
视为对某个类的实例的常规调用,并且
System
是类
Class
的实例,因此会出现该错误。

© www.soinside.com 2019 - 2024. All rights reserved.