定义一个带有默认值的可选
defining an optional with a default
我正在尝试定义一个带有可选参数的函数,如果没有传入,每个可选参数也有一个默认值。
但我无法编译它,也无法在网上找到任何有用的建议。
这是我的
defn test-optional-default-params [manA manB manC & [optA optB optC optD optE]
:or {[optA optAdef
optB optBdef
optC optCdef
optD optDdef
optE optEdef]}]
(prn (str "manB->"manB",mnC->"manC",optA->"optA",optB->"optB",optC->"optC",optD->"optD ", opE->" opE)))
您可以使用
(defn f [a b & {:keys [c d e] :or {c defaultc d defaultd e defaulte}}]
blabla)
但你必须这样做
(f 1 2 :c 3 :d 4 :e 5)
所以你也许可以做这样的事情(我尝试了一个基本功能:加法):
(defn add-rest* [c d e]
(+ c d e))
(def add-rest*
(fnil add-rest* 0 0 0))
(defn add
[a b & [c d e]]
(+ a b (add-rest c d e)))
(add 1 1) ;; 2
(add 1 1 1) ;; 3
(add 1 1 1 1) ;; 4
您可以使用多参数函数,因此默认值为 0 的加法示例变为:
(defn f+
([a b] (f+ a b 0 0 0))
([a b c] (f+ a b c 0 0))
([a b c d] (f+ a b c d 0))
([a b c d e] (+ a b c d e)))
用五个变量的期望函数替换上面的+。
上面的用法变为:
(f+ 1 2) ;; 3
(f+ 1 2 3) ;; 6
(f+ 1 2 3 4) ;; 10
(f+ 1 2 3 4 5) ;; 15
Note: also discussed previously with additional options
我正在尝试定义一个带有可选参数的函数,如果没有传入,每个可选参数也有一个默认值。 但我无法编译它,也无法在网上找到任何有用的建议。
这是我的
defn test-optional-default-params [manA manB manC & [optA optB optC optD optE]
:or {[optA optAdef
optB optBdef
optC optCdef
optD optDdef
optE optEdef]}]
(prn (str "manB->"manB",mnC->"manC",optA->"optA",optB->"optB",optC->"optC",optD->"optD ", opE->" opE)))
您可以使用
(defn f [a b & {:keys [c d e] :or {c defaultc d defaultd e defaulte}}]
blabla)
但你必须这样做
(f 1 2 :c 3 :d 4 :e 5)
所以你也许可以做这样的事情(我尝试了一个基本功能:加法):
(defn add-rest* [c d e]
(+ c d e))
(def add-rest*
(fnil add-rest* 0 0 0))
(defn add
[a b & [c d e]]
(+ a b (add-rest c d e)))
(add 1 1) ;; 2
(add 1 1 1) ;; 3
(add 1 1 1 1) ;; 4
您可以使用多参数函数,因此默认值为 0 的加法示例变为:
(defn f+
([a b] (f+ a b 0 0 0))
([a b c] (f+ a b c 0 0))
([a b c d] (f+ a b c d 0))
([a b c d e] (+ a b c d e)))
用五个变量的期望函数替换上面的+。 上面的用法变为:
(f+ 1 2) ;; 3
(f+ 1 2 3) ;; 6
(f+ 1 2 3 4) ;; 10
(f+ 1 2 3 4 5) ;; 15
Note: also discussed previously with additional options