请在 2024 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅关于页面,了解更多关于这个问题的信息。

+1
Clojure

我尝试使用 join 函数将一些字符串合并成一个单独的字符串,但我想避免空字符串。

例如,如果尝试合并 ["" "" "xpto"],返回结果为 "--xpto",这在我看来很奇怪,我想避免这种情况。

为了实现这一点,我创建了一个 util 函数移除它

(defn join-not-empty
  [separator coll]
  (join separator (remove empty? coll)))

我希望这个方法能够作为 join 函数的一个选项。

1 答案

+3

被选中
 
最佳答案

我已经遇到过类似的问题多次,所以我能理解您的痛苦,也不反对有额外的选项。

不过,这在我看来是一个用户空间的问题。为什么使用 empty? 而不是 str/blank?,其他谓词呢?甚至考虑查看元素对等...

可以将 join 视为一个聚合操作,其中 (remove empty?)coll 为其输入,并可以为 transducers 提供一个非常棒的应用。事实上,Chris Grand 的 xforms 已经有一个适合此用途的 transducing 环境:x/str

包装这个绝妙的东西给您带来

(require '[net.cgrand.xforms :as x])
(defn str-join
  "Works like a combination of str/join and x/str:
  - Use str/join if you don't need to preprocess coll
  - Use x/str if you need to preprocess coll but don't need a separator
  - Use this function if you need both preprocessing and a separator"
  [xform separator coll]
  (x/str (comp xform (interpose separator)) coll))
使用 "empty?" 的原因只是为了说明问题。我喜欢这种 x/str 方法。
...