Clojure で生成するクラスでフィールドをあれこれするのってどーするの?
cradle を作っているんだけども、実装を Java いクラスを作るか、全部関数で行えばいいか迷う。
とりあえず、gen-class
でやってみたんだけど、なんか違ったっぽい:
(gen-class :name "org.cradle.BuildResult" :init "init" :prefix "build-result-") (defn build-result-init [cradle failure] ;; フィールドってどうやるの??? ) (defn build-result-getCradle [this] ;; そこがわからないとここも実装できない )
ということでこんな感じにしてみた:
(deftype BuildResult [failure cradle] (getCradle [this] cradle) (getFailure [this] failure) (rethrowFailure [this] (if (instance? CradleException failure) (throw failure)) (if (not (nil? failure)) (throw (CradleException. "Build aborted because of an internal error." failure))) this))