Existen varias publicaciones de blog algo antiguas que aconsejan precaución al mezclar variables dinámicas, binding
y pmap
, p. Ej. here, donde obtenemos el siguiente fragmento de código:cambio de interacción vinculante y pmap?
user=> (def *foo* 5)
#'user/*foo*
user=> (defn adder
[param]
(+ *foo* param))
#'user/adder
user=> (binding [*foo* 10]
(doseq [v (pmap adder (repeat 3 5))]
(println v)))
10
10
10
nil
Pero eso no es lo que sucede cuando corro ese código (cambiando la primera línea de (def ^:dynamic *foo* 5)
). Obtengo tres 15
s como salida (usando Clojure 1.4), tal como lo esperaría ingenuamente —, es decir, con el cambio en la forma de enlace visto por la función pasada a pmap. ¿Han cambiado las vinculaciones locales de subprocesos y pmap? No puedo encontrar esto documentado en ningún lado.
gracias! ¿Dónde está esto documentado? no está en http://dev.clojure.org/display/doc/1.3 –
edición para incluir referencias –
¡Gracias! Apreciado. –