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,并且可以利用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))
发表于
使用empty?的原因只是为了说明问题。我喜欢这个x/str方法。
...