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

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

+1
Clojure

我正在尝试使用join函数将一些字符串组合成一个字符串,但是我想避免空字符串。

例如,如果我尝试连接["" "" "xpto"],返回值是"--xpto",而且我认为这很奇怪,并希望避免这种情况。

为了做到这一点,我创建了一个用于移除空字符串的工具函数

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

我想知道是否可以在join函数中将这种方法作为一个选项。

1 个答案

+3

被选中
 
最佳答案

我遇到过类似的情况很多次,所以我理解您的感受,并且不反对添加更多选项。

然而,我认为这是一个用户空间问题。为什么不用empty?而是用str/blank?,其他的谓词怎么样呢,甚至可以查看元素对的等等。

可以将join视为一种聚合操作,以(remove empty?)coll作为输入,并可以找到一个很好的transducer应用场合。实际上,Chris Grand的xforms已经提供了适合这个用途的transducer上下文: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))
使用空的"?"只是为了让问题更清楚。我喜欢这个x/str方法。
...