В Java класс java.awt.Point
имеет открытые поля x
и y
. См. Javadocs здесь http://download.oracle.com/javase/6/docs/api/java/awt/Point.html.
В Clojure точечный макрос работает для полей и методов. Это сработало для меня:
user=> (let [p (new java.awt.Point 2 4)] (.x p))
2
РЕДАКТИРОВАТЬ: следующее также работает (обратите внимание на пробел между точкой и р):
user=> (let [p (new java.awt.Point 2 4)] (. p x))
2
РЕДАКТИРОВАТЬ: Я решил сделать полный пример, учитывая, что java.awt.Point
имеет методы getX
и getY
в дополнение к открытым полям x
и y
. Так что здесь идет. Сначала создайте Java-класс следующим образом:
public class C {
public int x = 100;
}
Скомпилируйте
$ javac C.java
Теперь переместите C.class
в свой каталог clojure. Затем запустите REPL, импортируйте класс и посмотрите, как он работает:
$ java -cp clojure.jar clojure.main
Clojure 1.2.0
user=> (import C)
C
user=> (let [q (new C)] (. q x))
100
Обратите внимание, что работает и другой способ:
user=> (let [q (new C)] (.x q))
100