interpose和clojure.string / join有什么区别?

时间:2017-12-03 20:50:02

标签: clojure

可以公平地说clojure.string / join是一个专门用于字符串的插入函数吗?这些功能之间有什么区别吗?

3 个答案:

答案 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)