2009-06-24 11 views
5

¿Cuál es la forma más sencilla de crear un vector de referencias distintas?Clojure Vector de Refs

Usando (repeat 5 (ref nil)) devolverá una lista, pero todos ellos se referirán a la misma ref:

user=> (repeat 5 (ref nil)) 
(#<[email protected]: nil> #<[email protected]: nil> #<[email protected]: nil> #<[email protected]: nil> #<R 
[email protected]: nil>) 

mismo resultado con (replicate 5 (ref nil)):

user=> (replicate 5 (ref nil)) 
(#<[email protected]: nil> #<[email protected]: nil> #<[email protected]: nil> #<[email protected]: nil> 
#<[email protected]: nil>) 

Respuesta

4

Ok, esto es bastante grave, pero funciona:

user=> (map (fn [_] (ref nil)) (range 5)) 
(#<[email protected]: nil> #<[email protected]: nil> #<[email protected]: nil> #<[email protected]: nil> #<[email protected]: nil>) 

que devuelve un LazySeq, así que si quieres/necesidad de una Vector, a continuación, sólo tiene que utilizar:

user=> (vec (map (fn [_] (ref nil)) (range 5))) 
[#<[email protected]: nil> #<[email protected]: nil> #<[email protected]: nil> #<[email protected]: nil> #<[email protected]: nil>] 
Cuestiones relacionadas