私は以下のことが多くの理由から悪い考えであることを認識しています。私は23歳のスタックオーバーフロー担当者がいることを考えれば、私はプログラムを学ぶ新しい学習者であると仮定するのは自然です。しかし、私をユーモアにして、「どうしたいのですか/これをしたくないのですか」というのではなく、「どうすればこのことをすることができますか」に焦点を当ててください。私が欲しいものClojure Dynamic Binding
:
(def dog (Dog. ...))
(def cat (Cat. ...))
(with-animal dog
(println (str "Dog: " (speak) "\n")))
(with-animal cat
(println (str "Cat: " (speak) "\n")))
出力する:
Dog: woof
Cat: meow
だから基本的に、私はと動物はマクロS。T.になりたいです"speak"関数呼び出しのすべての発生は、私がブロックを呼び出しているオブジェクトにマップされます。
特に、私は書きたくない:
(let-binding [speak (fn [] "woof")] ...)
(let-binding [speak (fn [] "meow")] ...)
はむしろ、私が欲しいは私が呼んでいるオブジェクトのいくつかの方法に関数マップを話すと、動物のようにします。
Clojureでこれを行うためのきれいな方法はありますか?
ありがとうございます!
なぜプロトコルを使用しないのですか? – DanLebrero
私は免責事項が好きでした:) – szymanowski