在Clojure中,测试nil的惯用方法是什么,如果有什么东西是零,那么替换一个值?
例如我做了很多:
let [ val (if input-argument input-argument "use default argument")]
:但我觉得重复两次必须使用“输入参数”。
答案 0 :(得分:77)
只需使用或:
(or input-argument "default")
答案 1 :(得分:19)
Alex对“或”的建议确实是重写示例代码的惯用方法,但请注意,它不会仅替换nil
值,而是{{1} }}
如果您希望保留值false
但丢弃false
,则需要:
nil
答案 2 :(得分:7)
如果您只绑定变量以获取正确的值而不使用它两次,则可以采用其他方法。核心中有一个名为fnil
的函数。
使用要调用的函数和默认参数调用fnil
。这将返回一个函数,该函数将使用您提供的默认值替换nils。
你可以根据自己的需要做其中一件事。创建一个本地函数。
(let [default-fn (fnil fn-you-want-to call "default-argument")]
(default-fn input-argument))
在某些情况下(你总是拥有相同的默认参数),你可以移动到逻辑来从代码中执行此操作并将其放在原始函数所在的位置(或将函数包装在其他库中)。 / p>
(defn fn-you-want-to-call [arg] ....)
(def fn-you-want-to-call-default (fnil fn-you-want-to-call "default-argument"))
然后在你的代码中,它简化为
(fn-you-want-to-call-default input-argument)
你可以在这里找到更多: http://clojuredocs.org/clojure_core/clojure.core/fnil