我正在尝试实现记录构造函数之间的数据调度。调度是由一个名称(它是一个字符串,与数据一起接收)完成的。我希望每个新记录类型都能自动注册调度。例如,在 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 中的等价物是什么?