gpt4 book ai didi

string - 在 Clojure 中连接多个惰性字符串序列

转载 作者:行者123 更新时间:2023-12-02 09:51:33 26 4
gpt4 key购买 nike

我有几个字符串:

(def a "some random string")
(def b "this is a text")

现在我想连接它们的一部分来创建一个字符串“一些文本”。不幸的是,下面的两个字符串都不起作用。

(clojure.string/join " " [(take 4 a) (take-last 4 b)])
(str (take 4 a) " " (take-last 4 b))

这是因为函数 taketake-last 返回惰性序列。问题是:连接多个惰性字符串序列并返回一个字符串的正确方法是什么?

编辑:我找到了一个解决方案 - (apply str (concat (take 4 a) ""(take-last 4 a))) - 但这是最正确的方法?

最佳答案

您可能希望使用更高效的 subs(对于子字符串;请注意,有一个与 GC 相关的警告),而不是使用序列函数来对输入字符串进行切片。它,见下文):

(subs "asdf" 1 2)
; => "s"

;; a and b as in the question text
(clojure.string/join " " [(subs a 0 4) (subs b (- (count b) 4))])
; => "some text"

前面提到的警告是,只要第一个示例中返回的 "s" 仍然不符合垃圾回收的条件,原始的 "asdf" 也是如此(因为subs 在输入 String 上返回一个“ View ”,而不分配新的存储空间——这是 Java 的 substring 方法的行为,该方法 subs 换行)。如果您立即将 "s" 交给 subs 并且不保留对它的其他引用,那么这不是问题,因为 join 会丢弃它拉动角色后。

如果您最终确实使用了惰性字符序列,那么除了使用类似 (map (partial apply str) [...这里是您的向量...])< 之类的东西,没有什么可做的clojure.string/join 的输入转换为字符串。

关于string - 在 Clojure 中连接多个惰性字符串序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com