Me doy cuenta de que la siguiente es una mala idea por muchas razones. También me doy cuenta de que dado que tengo un representante de stackoverflow de 23, es natural suponer que soy un principiante en aprender a programar. Sin embargo, por favor, cuéntame, y concéntrate en el aspecto "¿cómo podemos hacer esto?" En lugar de "¿por qué quieres hacer esto/no quieres hacer esto?".Clojure Dynamic Binding
lo que quiero:
(def dog (Dog. ...))
(def cat (Cat. ...))
(with-animal dog
(println (str "Dog: " (speak) "\n")))
(with-animal cat
(println (str "Cat: " (speak) "\n")))
a salida:
Dog: woof
Cat: meow
Así que, básicamente, quiero con animales ser un macro S.T. todas las ocurrencias de la llamada de función "hablar" se asignan al objeto con el que estoy llamando al bloque.
En particular, no quiero escribir:
(let-binding [speak (fn [] "woof")] ...)
(let-binding [speak (fn [] "meow")] ...)
Más bien, quiero que el con-animal para hacer el hablan mapa de funciones a algún método del objeto que estoy llamando a.
¿Hay alguna manera de hacerlo en Clojure?
Gracias!
¿Por qué no utiliza protocolos? – DanLebrero
me gustó la exención de responsabilidad :) – szymanowski