レコードコンストラクター間でのデータディスパッチを実現しようとしています。ディスパッチは名前(データとともに受信される文字列)によって行われます。そして、新しいレコードタイプごとに自動的にディスパッチに登録してほしい。たとえば、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で同等のものは何でしょうか?