我正在努力构建一个宏,让我core.match/match
以向量的形式传递模式和结果。我希望能够做到这一点:
(let [x {:a 1}
patterns [[{:a 2}] :high
[{:a 1}] :low]]
(my-match x patterns))
> :low
我尝试了以下方法和其他几种不起作用的方法,除非我将模式作为文字传递。
(defmacro my-match [e ems]
`(m/match [~e] ~@ems))
(let [x {:a 1}
patterns [[{:a 2}] :high
[{:a 1}] :low]]
(my-match x patterns))
=> CompilerException java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol, compiling:(*cider-repl kontrakt*:106:10)
(let [x {:a 1}]
(my-match x [[{:a 2}] :high
[{:a 1}] :low]))
=> :low