模式匹配函数参数

Max*_*nov 1 clojure pattern-matching

我想foo接受两个参数,如果第一个参数是:ok它应该返回第二个参数,否则返回第一个参数。

我想用这样的模式匹配来做到这一点:

(defn foo [:ok val] (val))
(defn foo [key val] (key))
Run Code Online (Sandbox Code Playgroud)

但不支持。我可以用类似的方式(使用模式匹配或某种)来做到这一点吗?

erd*_*dos 6

如果模式不太复杂,您可以使用多种方法实现接近模式匹配的效果:

(defmulti foo (fn [key val] key))
(defmethod foo :default [key _] key)
(defmethod foo :ok [_ val] val)
Run Code Online (Sandbox Code Playgroud)