首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Refs的Clojure向量

Refs的Clojure向量
EN

Stack Overflow用户
提问于 2009-06-24 17:34:51
回答 2查看 486关注 0票数 5

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

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

代码语言:javascript
复制
user=> (repeat 5 (ref nil))
(#<Ref@16ef71: nil> #<Ref@16ef71: nil> #<Ref@16ef71: nil> #<Ref@16ef71: nil> #<R
ef@16ef71: nil>)

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

代码语言:javascript
复制
user=> (replicate 5 (ref nil))
(#<Ref@1d88db7: nil> #<Ref@1d88db7: nil> #<Ref@1d88db7: nil> #<Ref@1d88db7: nil>
 #<Ref@1d88db7: nil>)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-24 17:50:25

代码语言:javascript
复制
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
票数 8
EN

Stack Overflow用户

发布于 2009-06-24 17:42:45

好吧,这是相当粗俗,但它是有效的:

代码语言:javascript
复制
user=> (map (fn [_] (ref nil)) (range 5))
(#<Ref@27147d: nil> #<Ref@b248c8: nil> #<Ref@c86116: nil> #<Ref@5e06ef: nil> #<Ref@19719f: nil>)

它返回一个向量,所以如果你想/需要一个LazySeq,那么只需使用:

代码语言:javascript
复制
user=> (vec (map (fn [_] (ref nil)) (range 5)))
[#<Ref@5bf9cf: nil> #<Ref@6dbfb0: nil> #<Ref@43f787: nil> #<Ref@2fe9bf: nil> #<Ref@9b1e15: nil>]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1039800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档