Clojure 函数调用的可选参数

sil*_*lau 1 arguments clojure

我有一个a可能是也可能不是的价值nil

我有一堆函数(在我的控制范围之外),a如果它不是,则应将其值作为第一个参数调用nil。如果是nil,则应在没有 的情况下调用该函数a

代替:

(defn my-fn [x]
  (if a
      (beyond-my-control-fn a x)
      (beyond-my-control-fn x)))
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情:

(defn my-fn [x]
  (add-argument-if-not-nil-> a (beyond-my-control-fn x)))
Run Code Online (Sandbox Code Playgroud)

是否有一个宏可以让我这样做,还是我应该自己做?

mav*_*ozo 5

你可以用另一个函数包装那些超出你控制的函数的调用

(defn call-with-a-if-not-nil
  [f a & args]
  (if (nil? a)
    (apply f args)
    (apply f a args)))
Run Code Online (Sandbox Code Playgroud)

样品:

(call-with-a-if-not-nil beyond-my-control-fn a x)

(call-with-a-if-not-nil beyond-my-control-fn-1 a v w)
Run Code Online (Sandbox Code Playgroud)