我试图在记录构造函数之间实现数据调度.调度由名称(这是一个字符串,与数据一起接收)完成.我希望每个新的记录类型能够自动注册发送.例如,在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
}
Run Code Online (Sandbox Code Playgroud)
这样每次Creator创建一个类型的对象时,它就会被注册Dispatcher,之后可以通过它的名字找到并传递ConstructionData给创建一个Creation.
Clojure中的等价物是什么?
我会使用map和plain old functions方法,如下所示:
(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) ))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |