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

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

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

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


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

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

从Java互操作性的Clojure文档:

'。' 特殊形式是访问Java的基础。 它可以被认为是成员访问操作符,并且/或者被认为是'在'范围内。

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

链接地址: http://www.djcxy.com/p/33631.html

上一篇: Dollar sign ($) in clojure symbol name

下一篇: How are Clojure macros different from C macros?