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

Pav*_*gin 3 clojure

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

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

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

ton*_*edz 5

这是在Clojure中访问嵌套类的方法.在这种情况下,您正在访问Entry,这是界面内定义的Map接口

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

关于Java互操作性Clojure文档:

'.' 特殊形式是访问Java的基础.它可以被视为成员访问运算符,和/或读作'在'范围内'.

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