美元符号($)在clojure符号名称

时间:2014-08-03 11:42:38

标签: clojure

我一直在编写一个clojure解析器并遇到以下语法:

(defn key
  "Returns the key of the map entry."
  {:added "1.0"
   :static true}
  [^java.util.Map$Entry e]
    (. e (getKey)))

这是什么' $'这意味着什么元数据之外的那种语法是否有用处?

1 个答案:

答案 0 :(得分:5)

这是在Clojure中访问嵌套类的方法。在这种情况下,您需要访问Entry, which is an interface defined inside the Map interface

在Java中,您只需编写java.util.Map.Entry,在Clojure中您需要使用美元符号:java.util.Map$Entry

来自Clojure documentation on Java interoperability

  

'。'特殊形式是访问Java的基础。它可以被视为会员访问运营商,和/或在'范围内阅读。

     

如果第一个操作数是解析为类名的符号,则该访问被视为指定类的静态成员。请注意,根据JVM规范,嵌套类的名称为EnclosingClass$NestedClass。否则,它被假定为实例成员,并且第一个参数被计算以生成目标对象。