首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gen-class关闭多个构造函数

使用gen-class关闭多个构造函数
EN

Stack Overflow用户
提问于 2013-09-13 06:55:04
回答 1查看 1.8K关注 0票数 8

如何在clojure中使用gen类定义多个构造函数和状态?对于:init、:state和:constructors的单值映射,我看不出有什么方法可以做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-13 08:00:52

多构造函数

要在生成的类上拥有多个构造函数,您需要gen类的: constructor选项中指定的所有构造函数参数,并且:init函数应该是多重匹配的。如下所示:

代码语言:javascript
复制
(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}]))

在这种情况下,两个构造函数都将调用相同的零参数超级类型构造函数,这是由:构造函数散列映射中的空向量值指定的。

多状态

状态通常是一个散列映射,所以您不需要多个状态。只需在对象中使用字段名的地方使用关键字即可。

代码语言:javascript
复制
{:name "name1"
 :special false}

(defn -method1 [this] (:name (.state this)))
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18780071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档