estoy frente a un problema en la forma de la arquitectura de una determinada pieza de mi software. que permite decir, tengo una función llamada make-temp-dir
(y muchos otros) que hace un poco de magia oscuro, dependiendo del sistema operativo actual. Quiero ser capaz de poner las implementaciones de estos métodos para cada sistema operativo en un espacio de nombres separado.despacho dependientes Medio Ambiente de protocolos/métodos múltiples en clojure
En primer lugar, creo que los protocolos (si es posible) o los multimétodos son la solución a esto. Sin embargo, nunca he visto un ejemplo de uso de estos con las implementaciones que abarca varios espacios de nombres. Y no puedo imaginar cómo funcionaría esto .
En segundo lugar, si uso protocolos para esto, voy a tener que llamar a los métodos algo como
(make-temp-dir current-os arg-1 arg-2)
De alguna manera, pasando por el sistema operativo como primer argumento todo el tiempo no parece demasiado buena a mi. Por motivos semánticos, me gustaría que el make-temp-dir
tome decisiones inteligentes dependiendo del sistema operativo. Claro que puedo usar algunas macros y hacer algo como
(doto current-os
(make-temp-dir arg-1 arg2))
pero eso se siente mal.
¿Cómo se debe hacer esto? ¿O estoy yendo por el camino equivocado? Cualquier ayuda apreciada.
Editar: De acuerdo, muchas gracias a @kotarak, logré que algo funcione. Para cualquiera que tropiece con esto, https://gist.github.com/2477120. Está funcionando bien, creo que voy a ir con eso. Gracias a todos.
Por lo tanto, la segunda pieza de código es necesario que haya en 'derecho your.utils' espacio de nombres? Además, ¿cuál es el macro del lector '# ''? Disculpe, tampoco sé cómo googlearlo;) –
'#'' se llama * cotización * var. Puede encontrar una descripción de las cotizaciones var en https://groups.google.com/forum/?fromgroups#!topic/clojure/jDBAJD4nWqs. – user100464
@kotarak, bien, solución increíble. Me tomó tanto tiempo digerirlo, pero creo que entiendo lo que está pasando. Sin embargo, me gustaría recibir algunas opiniones sobre mi primer comentario. –