首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Clojure中预置向量的惯用方法是什么?

在Clojure中预置向量的惯用方法是什么?
EN

Stack Overflow用户
提问于 2010-11-04 18:28:09
回答 3查看 28.5K关注 0票数 60

添加到列表的前缀很简单:

代码语言:javascript
复制
user=> (conj '(:bar :baz) :foo)
(:foo :bar :baz)

追加到向量很容易:

代码语言:javascript
复制
user=> (conj [:bar :baz] :foo) 
[:bar :baz :foo]

如何(惯常地)预置向量,同时返回一个向量?这不起作用,因为它返回一个seq,而不是一个向量:

代码语言:javascript
复制
user=> (cons :foo [:bar :baz])     
(:foo :bar :baz)

这是丑陋的(IMVHO):

代码语言:javascript
复制
user=> (apply vector (cons :foo [:bar :baz])) 
[:foo :bar :baz]

注意:我基本上只想要一个可以附加和预先添加的数据结构。附加到大的列表应该会有很大的性能损失,所以我想到了向量。

EN

Stack Overflow用户

发布于 2018-12-22 03:53:42

如果你不怕引用准引号,这个解决方案实际上是相当优雅的(对于“优雅”的一些定义):

代码语言:javascript
复制
> `[~:foo ~@[:bar :baz]]

[:foo :bar :baz]

实际上,我有时会在真实的代码中使用它,因为声明性语法使它具有很好的可读性。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4095714

复制
相关文章

相似问题

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