gen-class を使ったときにどうやってインスタンスを取得したらいい?
毎日 StackOverflow は見てるんですが、まさか @tnoda_ さんが回答者として出てくるとは思わなかった。
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