【发布时间】:2018-01-16 21:40:39
【问题描述】:
在 Clojure 中,fnil 函数可用于包装另一个函数:如果被包装函数的参数是 nil,则包装器会将其更改为其他值。
例如((fnil * 0) nil) ; returns 0 但是 (* nil 0) 会抛出 NPE。
我要问的是是否有类似的内置函数可以修改输出,以防输入为nil。 (换句话说,它甚至不调用包装函数,而是返回默认值。)
也就是说,有没有等价于下面的内置函数?
(defn ifnil [fun default]
(fn [& args]
(if (some nil? args) default (apply fun args))))
; ((ifnil * nil) 1 2 3) ; returns 6
; ((ifnil * nil) 1 nil 3) ; returns nil
注意:一如既往,“不,没有这样的功能”也是一个有效的答案(我怀疑,顺便说一句。)
【问题讨论】:
-
我没见过。
-
你的问题很好,但你的例子很糟糕:
(* nil)返回nil,而不是抛出异常。将x乘以无因数只会返回x,而无需验证x是否为数字。 -
@amalloy:谢谢,你说得对,我的意思是
(* nil 0)(实际上,(* nil)只是返回nil。我会相应地编辑问题。