【发布时间】:2016-05-15 15:53:28
【问题描述】:
我正在努力构建一个宏,让我可以将模式和结果以向量的形式传递给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
【问题讨论】:
标签: clojure macros core.match