gpt4 book ai didi

Clojure - 保留记录类型的注册表

转载 作者:行者123 更新时间:2023-12-02 22:12:14 24 4
gpt4 key购买 nike

我正在尝试实现记录构造函数之间的数据调度。调度是通过名称(它是一个字符串,与数据一起接收)完成的。我希望每个新记录类型都自动注册以进行调度。例如,在 Scala 中,我会做这样的事情:

object Dispatcher {
val dispatchMap = scala.collection.mutable.Map[String, Creator]()
def += (crt: Creator) { dispatcherMap += (crt.name, crt) }
}

abstract class Creator[C <: Creation](val name: String) {
Dispatcher += this

def apply(consData: ConstructionData): C

}

这样每次创建Creator类型的对象时,它都会在Dispatcher中注册,之后可以通过它的名字找到它并传递给ConstructionData 创建一个 Creation

Clojure 中的等价物是什么?

最佳答案

我会使用 map 和普通的旧函数方法,如下所示:

(ns creator)

(def dispatcher (atom {}))

(defn defcreator [name apply-fn]
(swap! dispatcher assoc name apply-fn)
apply-fn)

(defcreator :abc-creator (fn [cons-data] (do-something cons-data) ))

关于Clojure - 保留记录类型的注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15067423/

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