1

如何将匹配的:or或绑定到 core.match 中的变量?

user=> (use 'clojure.core.match)
user=> (let [v 2]
  #_=>          (match [v]
  #_=>            [((:or 1 2) :as x)] [:foo  x]
  #_=>            :else :bar))

             java.lang.RuntimeException: Unable to resolve symbol: x in this context
clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: Unable to resolve symbol: x in this context, compiling:(/private/var/folders/jp/y5hpfwq962x476pm_1knzr8c0000gn/T/form-init7072120633012300984.clj:2:10)
user=>
4

1 回答 1

3

似乎core.match不允许将:or模式绑定到符号。但是你总是可以:or用守卫来模拟行为,守卫模式可以绑定到符号:

(def v [1 2])

(match v
  [(x :guard #{1 2}) 2] [:foo x]
  :else :bar) ;; => [:foo 1]
于 2017-05-08T18:45:57.960 回答