読者です 読者をやめる 読者になる 読者になる

(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

gen-class を使ったときにどうやってインスタンスを取得したらいい?

毎日 StackOverflow は見てるんですが、まさか @ さんが回答者として出てくるとは思わなかった。

gen-class 使って出来るクラスのインスタンスメソッドの中で "this" にアクセスしたいんだけど、どうしたらいいの?という質問

(ns example
  (:gen-class))

(defn -exampleMethod []
  (println (str this)))

回答ですが、第一引数に呼び出し元のオブジェクトがくるように gen-class はメソッドを生成するよということで、

(defn -exampleMethod [this]
  (println (str this)))

で、スーパークラスでもインターフェイスでもないクラスを定義するときは gen-class に :methods オプションを追加する必要があるので、以下のようになりますよと。

(ns example)

(gen-class
 :name com.example.Example
 :methods [[exampleMethod [] void]])

(defn- -exampleMethod
  [this]
  (println (str this)))
user> (compile 'example)
example

user> (.exampleMethod (com.example.Example.))
com.example.Example@73715410
nil