可以公平地说clojure.string / join是一个专门用于字符串的插入函数吗?这些功能之间有什么区别吗?
答案 0 :(得分:3)
从概念上讲,它们基本相同。它们各自采用集合*和分隔符,并返回一个集合,其中分隔符位于原始集合的每个元素之间。它们之间的主要区别是:
clojure.string/join
在分隔符和集合的每个元素上调用toString
,并使用StringBuilder
构造字符串。 interpose
不会影响分隔符或集合元素,并返回惰性列表*而不是完全实现的字符串。它是根据interleave
:
(drop 1 (interleave (repeat sep) coll))
类似的概念,但实现方式非常不同。
*我忽略了返回换能器的interpose
的无碰撞版本。
答案 1 :(得分:1)
插入
Interpose使用分隔符和序列,并通过在序列元素之间添加分隔符来返回惰性序列
user=> (interpose "-" (list "a" "b" "c"))
("a" "-" "b" "-" "c")
user=> (type (interpose "-" (list "a" "b" "c")))
clojure.lang.LazySeq
加入
Join使用分隔符和序列,并通过将元素和分隔符连接在一起来返回字符串。
user=> (clojure.string/join "-" (list "a" "b" "c"))
"a-b-c"
user=> (type (clojure.string/join "-" (list "a" "b" "c")))
java.lang.String
答案 2 :(得分:0)
你的直觉是正确的。请注意,interpose
也可以返回传感器而且很懒惰。
只需查看文档字符串或源代码:
(doc interpose)
(source interpose)
等