关于字符串:是否有一些Clojure库具有Java的StringUtils.defaultIfBlank(str,default)的功能?

Is there some Clojure library which has a function acts as Java's StringUtils.defaultIfBlank(str, default)?

我需要一个带有两个参数input字符串和default字符串的函数,如果不为空,则返回inputdefault

1
2
3
4
(defn default-if-blank [input default]
  (if (clojure.string/blank? input)
    default
    input))

我可以实现该功能,但是我认为Clojure世界中将有很多好的实用程序库,例如Java世界中的Apache commons或Guava。

由我自己而不是使用某些库来实现这些功能是否常见? 我是Clojure的新手,所以这可能是愚蠢的问题,但是任何建议都会对我有所帮助。 谢谢。


您所拥有的是非常正常的,并且在高质量的Clojure代码中会很好。 这样写是完全可以的,因为Clojure是一种简洁的语言,因此不会增加太多的智力开销。

在某些情况下,您将不需要它,例如,如果要从任何集合中提取值,则get采用可选的默认参数:

1
2
3
4
user> (get {1"one" 2"two"}
            42
          "infinity")
"infinity"

和销毁地图等内容时的可选参数:

1
2
3
4
5
6
7
8
9
user> (let [{a :a b :b c :c :or {a :default-a
                                 b :default-b}}
            {:a 42 :c 99}]
        (println"a is" a)
        (println"b is" b)
        (println"c is" c))
a is 42
b is :default-b
c is 99

尽管我每天使用的代码库中有很多(if (test foo) foo :default)案例,但使它们很少需要这种情况。 对于我们来说,这种方式并不常见且不统一,无法像您所做的那样进行整合。