gpt4 book ai didi

使用 gen-class Clojure 多个构造函数

转载 作者:行者123 更新时间:2023-12-04 13:40:11 24 4
gpt4 key购买 nike

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

最佳答案

多个构造函数

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

在这种情况下,两个构造函数将调用相同的零参数父类(super class)型构造函数,如 :constructor 哈希映射中的空向量值所指定的。

多个状态

状态通常是一个哈希映射,因此您不需要多个状态。只需在对象中使用字段名称的地方使用关键字。
{:name "name1"
:special false}

(defn -method1 [this] (:name (.state this)))

关于使用 gen-class Clojure 多个构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18780071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com