Clojure中如何用模式匹配实现满足特定逻辑的foo函数?
解决方法
在Clojure中,你不能通过重复定义defn来实现模式匹配分支——后定义的函数会直接覆盖前一个。下面是几种符合需求的实现方式:
1. 核心内置条件判断(最简洁)
直接用if做相等判断,无需额外依赖:
(defn foo [key val] (if (= key :ok) val key))
2. 使用case宏(更清晰的分支表达)
case适合针对固定值的分支匹配,代码可读性更强:
(defn foo [key val] (case key :ok val key))
3. 模式匹配风格(借助core.match库)
如果想要更接近模式匹配的语法,可以使用Clojure的clojure.core.match库(需要先引入依赖):
(require '[clojure.core.match :as m]) (defn foo [key val] (m/match [key val] [:ok v] v [k _] k))
内容的提问来源于stack exchange,提问作者Max Smirnov
相关产品推荐
相关产品推荐

