【问题标题】:Clojure multiple constructors using gen-classClojure 使用 gen-class 的多个构造函数
【发布时间】:2013-09-13 06:55:04
【问题描述】:

如何在 clojure 中使用 gen-class 定义多个构造函数和状态? 我看不到使用 :init、:state 和 :constructors 的单值映射的方法。

【问题讨论】:

    标签: clojure gen-class


    【解决方案1】:

    多个构造函数

    要在生成的类上有多个构造函数,您需要在 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)))
    

    【讨论】:

    • 太棒了!谢谢。地图和多艺术函数的普通 clojure 概念使这变得如此简单。:)
    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 2010-12-07
    相关资源
    最近更新 更多