参考Clojure传染媒介

Kai*_*Kai 5 vector clojure ref

创建不同引用向量的最简单方法是什么?

使用(repeat 5 (ref nil))将返回一个列表,但它们都将引用相同的ref:

user=> (repeat 5 (ref nil))
(#<Ref@16ef71: nil> #<Ref@16ef71: nil> #<Ref@16ef71: nil> #<Ref@16ef71: nil> #<R
ef@16ef71: nil>)
Run Code Online (Sandbox Code Playgroud)

结果相同(replicate 5 (ref nil)):

user=> (replicate 5 (ref nil))
(#<Ref@1d88db7: nil> #<Ref@1d88db7: nil> #<Ref@1d88db7: nil> #<Ref@1d88db7: nil>
 #<Ref@1d88db7: nil>)
Run Code Online (Sandbox Code Playgroud)

Bri*_*per 8

user> (doc repeatedly)
-------------------------
clojure.core/repeatedly
([f])
  Takes a function of no args, presumably with side effects, and returns an infinite
  lazy sequence of calls to it
nil

user> (take 5 (repeatedly #(ref nil)))
(#<Ref@1f10a67: nil> #<Ref@1e2161d: nil> #<Ref@1a034d: nil> #<Ref@1cee792: nil> #<Ref@c5577c: nil>)
us
Run Code Online (Sandbox Code Playgroud)