是否有一些Clojure库有一个函数充当Java的StringUtils.defaultIfBlank(str,default)?

时间:2016-01-05 01:31:57

标签: string clojure

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

(defn default-if-blank [input default]
  (if (clojure.string/blank? input)
    default
    input))

我可以实现这个功能,但我认为在Clojure世界中会有很多优秀的实用程序库,比如Apache公共或Java世界中的Guava。

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

1 个答案:

答案 0 :(得分:7)

你所拥有的是非常正常的,并且在高质量的Clojure代码中完美无缺。用这种方式编写是完全可以的,因为Clojure是一种简洁的语言,不会增加太多的智力开销。

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

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

和破坏地图之类的东西时的可选参数:

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)个案例。对于我们来说,这种方式并不常见且一致,因为它可以像你一样巩固它。