此問題與this one密切相關,但我認爲更一般。我們如何能夠即時創建某個類型或記錄的「實例」
最近我嘗試使用multimethods(或使用獨特的函數構造函數,如果可能)創建類型「實例」,基於元數據標記。我用這個標籤鏈接了一個類型(引擎蓋下的java類),然後我不知道如何以優雅的方式繼續(沒有eval或java反射和字符串);新是一種特殊的形式,雖然使用宏,但很難處理。
在seudo代碼將是:
(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))
重新閱讀引用的上一個問題的評論可能唯一的方法是修改clojure的數據類型功能: -/ – jneira 2010-09-20 08:24:23
是否要爲每種記錄類型編寫自定義工廠代碼並以某種方式將其與記錄類型相關聯,以便您可以使用記錄類型的名稱(而不是工廠名稱)調用工廠? – Chouser 2010-09-20 14:38:59
mmm這正是mi原來的想法,如果可能,沒有明確的工廠,使用多方法或協議方法(或有點派遣)以可擴展的方式添加構造函數 – jneira 2010-09-20 16:20:27