如何在 clojure 中使用 gen-class 定义多个构造函数和状态?我看不到使用 :init、:state 和 :constructors 的单值映射的方法。
问问题
1748 次
1 回答
13
多个构造函数
要在生成的类上有多个构造函数,您需要在 gen-class 的 :constructors 选项中指定的所有构造函数参数,并且 :init 函数应该是多参数以匹配。类似于以下内容:
(ns something-amazing
(:gen-class :init myconstructor
:state state
:constructors {[String] []
[String String] []}))
(defn -myconstructor
([^String p1] [[] {:name p1 :special false}])
([^String p1 ^String p2] [[] {:name p1 :special p2}]))
在这种情况下,两个构造函数都将调用相同的零参数超类型构造函数,由 :constructor 哈希映射中的空向量值指定。
多个状态
状态通常是一个哈希映射,所以你不需要多个状态。只需在对象中使用字段名称的地方使用关键字。
{:name "name1"
:special false}
(defn -method1 [this] (:name (.state this)))
于 2013-09-13T08:00:52.737 回答