如何在clojure中使用gen类定义多个构造函数和状态?对于:init、:state和:constructors的单值映射,我看不出有什么方法可以做到这一点。
发布于 2013-09-13 08:00:52
多构造函数
要在生成的类上拥有多个构造函数,您需要gen类的: constructor选项中指定的所有构造函数参数,并且: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}]))在这种情况下,两个构造函数都将调用相同的零参数超级类型构造函数,这是由:构造函数散列映射中的空向量值指定的。
多状态
状态通常是一个散列映射,所以您不需要多个状态。只需在对象中使用字段名的地方使用关键字即可。
{:name "name1"
:special false}
(defn -method1 [this] (:name (.state this)))https://stackoverflow.com/questions/18780071
复制相似问题