Как мы можем создавать «экземпляры» типа или записи на лету

Этот вопрос тесно связан с этим , но я думаю, что он более общий.

Недавно я пытался создавать «экземпляры» типа «на лету» с помощью различных методов (или, если возможно, с помощью уникального конструктора функций) на основе тега метаданных. Я связал тип (класс java под капотом) с этим тегом, и тогда я не знал, как продолжить элегантным способом (без eval или java-отражения и строк); new - это особая форма, и с ней трудно работать, несмотря на то, что вы используете макросы.

В seudo-code это будет:

(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))

1
задан Community 23 May 2017 в 12:11
поделиться