I持ってREPLで何が起こっ以下:基本的にClojureのダイナミックレット?
mathematics.core> (let [zebra 1] (resolve 'zebra))
nil
mathematics.core> (def zebra 1)
#'mathematics.core/zebra
mathematics.core> (let [zebra 2] (when (resolve 'zebra) (eval 'zebra)))
1
、私は変数に値にアクセスすることができ、動的にそのフォーム内の関数をlet
フォームのようなものを使用して変数に値をバインドし、持っていると思いますに縛られている。
mathematics.core> (def ^:dynamic zebra 1)
#'mathematics.core/zebra
mathematics.core> (binding [zebra 2] (when (resolve 'zebra) (eval 'zebra)))
2
binding
私が欲しいトリックを行うようだが、私の知る限り、それは最初:dynamic
メタデータを定義する変数が必要です。前もって定義されたことのない変数を使用することができ、実際に定義されているかのようにその変数にアクセスできるようにしたい説明するために
、私はこのような何かをしたい:
mathematics.core> (let-dynamic [undefined-variable 1]
(when (resolve 'undefined-variable) (eval 'unresolved-variable)))
1
はこれを行う簡単な方法はありますか?それともマクロを使ってこれを達成する方法ですか?
[XY問題](http://www.perlmonks.org/?node_id=542341)のような匂いがします。 –