这个问题与这个问题密切相关,但我认为更笼统。
最近,我尝试使用基于元数据标记的多方法(或使用唯一的函数构造函数)动态创建类型“实例”。我用这个标签链接了一个类型(引擎盖下的java类),然后我不知道如何以优雅的方式继续(没有eval或java反射和字符串);new 是一种特殊形式,虽然使用宏,但很难处理。
在伪代码中它将是:
(def my-tagged-data (with-meta my-data {:my-type-tag my-ns.My-Type}))
(def factory-function [tagged-data]
(create (:my-type-tag (meta tagged-data)) tagged-data))