Dollar sign ($) in clojure symbol name

I've been writing a clojure parser and come across the follow syntax:

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

What does that '$' mean here? Is there any usage for that kind of syntax outside of metadata?


This is the way to access nested classes in Clojure. In this case, you're accessing Entry , which is an interface defined inside the Map interface

In Java, you'd simply write java.util.Map.Entry , in Clojure you need to use the dollar sign: java.util.Map$Entry

From the Clojure documentation on Java interoperability:

The '.' special form is the basis for access to Java. It can be considered a member-access operator, and/or read as 'in the scope of'.

If the first operand is a symbol that resolves to a class name, the access is considered to be to a static member of the named class. Note that nested classes are named EnclosingClass$NestedClass , per the JVM spec. Otherwise it is presumed to be an instance member and the first argument is evaluated to produce the target object.

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

上一篇: 无法找到Clojure函数的来源

下一篇: 美元符号($)在clojure符号名称