【发布时间】:2023-03-14 22:29:01
【问题描述】:
我在 Clojure 中编写了一个概率函数,它采用可选的选项哈希映射:
(defn roll-lte
([n d] (/ n d))
([n d options]
(let [p (/ n d)
roll-type (:type options :normal)]
(cond
(= roll-type :advantage) (- (* p 2) (* p p))
(= roll-type :disadvantage) (* p p)
(= roll-type :normal) p
:else (throw (IllegalArgumentException. "Invalid roll type."))))))
这按预期工作,但其想法是编写基于此的其他函数——例如:
(defn roll-gte
([n d] (roll-lte (- d n -1) d))
([n d options] (roll-lte (- d n -1) d options)))
roll-lte 中的两个参数使函数的构建变得尴尬和重复,尤其是在上述情况下,options 只是被转发到roll-lte。有没有更简洁、更少重复的方法来实现这一点?
【问题讨论】:
标签: clojure optional-parameters optional-arguments