1

この質問はこれと密接に関連してますが、もっと一般的だと思います。

最近、メタデータタグに基づいて、マルチメソッド(または可能であれば一意の関数コンストラクター)を使用して、その場でタイプ「インスタンス」を作成しようとしています。タイプ(内部の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))
4

2 に答える 2

2

型にファクトリ関数を提供できます。

(def my-tagged-data (with-meta my-data {:my-type-factory `my-type-factory}))

(defn factory-function
  [tagged-data] 
  (@(resolve (:my-type-factory (meta tagged-data))) tagged-data))

これは、実行できる場合とできない場合があります。

于 2010-09-20T11:29:17.717 に答える
0

リフレクションを使わないといけないと思います。(評価よりも良いアイデアだと思います)。

于 2010-09-20T09:49:23.133 に答える