我需要一个带有两个参数input
字符串和default
字符串的函数,如果不是空白则返回input
,或default
。
(defn default-if-blank [input default]
(if (clojure.string/blank? input)
default
input))
我可以实现这个功能,但我认为在Clojure世界中会有很多优秀的实用程序库,比如Apache公共或Java世界中的Guava。
我自己实现这些功能是否很常见,而不是使用某些库?我是Clojure的新手,所以这可能是个愚蠢的问题,但任何建议都会对我有所帮助。感谢。
答案 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)
个案例。对于我们来说,这种方式并不常见且一致,因为它可以像你一样巩固它。