我需要一个函数,它接受两个参数input字符串和default字符串,然后返回,input如果不是空白,或default.
(defn default-if-blank [input default]
(if (clojure.string/blank? input)
default
input))
Run Code Online (Sandbox Code Playgroud)
我可以实现这个功能,但我认为在Clojure世界中会有很多优秀的实用程序库,比如Apache公共或Java世界中的Guava.
我自己实现这些功能,而不是使用某些库是常见的吗?我是Clojure的新手,所以这可能是个愚蠢的问题,但任何建议都会对我有所帮助.谢谢.
你所拥有的是非常正常的,并且在高质量的Clojure代码中完全没问题.用这种方式编写是完全可以的,因为Clojure是一种简洁的语言,它不会增加太多的智力开销.
在某些情况下,您不需要它,例如,如果您从任何集合中提取值,get则采用可选的默认参数:
user> (get {1 "one" 2 "two"}
42
"infinity")
"infinity"
Run Code Online (Sandbox Code Playgroud)
在破坏地图之类的东西时可选参数:
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
Run Code Online (Sandbox Code Playgroud)
尽管(if (test foo) foo :default)在我每天使用的代码库中有很多案例,但是不太常见需要这些情况.对我们来说,这种方式并不常见,也不一定能够像你所做的那样得到巩固.