在clojure中,为什么要在向量中匹配地图?

在clojure中,为什么要在向量中匹配地图?,clojure,core.match,Clojure,Core.match,从core.match的示例代码中,url: 为什么我们只能匹配一个“x”?我们为什么不能那样做 (let [x {:a 1 :b 1}] (match x {:a _ :b 2} :a0 {:a 1 :b 1} :a1 {:c 3 :d _ :e 4} :a2 :else nil)) ;=> :a1 你可以;或者至少我是从阅读中推断出来的 匹配源从以下行开始: (defmacro match . . . [vars & clause

从core.match的示例代码中,url:

为什么我们只能匹配一个“x”?我们为什么不能那样做

(let [x {:a 1 :b 1}]
  (match x
    {:a _ :b 2} :a0
    {:a 1 :b 1} :a1
    {:c 3 :d _ :e 4} :a2
    :else nil))

;=> :a1

你可以;或者至少我是从阅读中推断出来的

匹配源从以下行开始:

(defmacro match
  . . .
  [vars & clauses]
  (let [[vars clauses]
        (if (vector? vars)  ; If it's a vector...
          [vars clauses]    ;  leave it alone,
          [(vector vars)    ;  else wrap it in a vector
            . . .]
该文档还包含位:

。您可以选择单程 var不需要包装在向量中,那么问题就不需要包装在向量中 向量

那他们为什么要用向量来展示例子呢?可能是为了语法的一致性。这可能有助于理解这样一个简单、基本的概述。在使用和不使用向量之间来回切换将需要解释何时需要向量,这将偏离页面的要点

编辑:实际上,它在顶部可以匹配未包装的值。您可以通过在该页面上搜索匹配x来找到它

(defmacro match
  . . .
  [vars & clauses]
  (let [[vars clauses]
        (if (vector? vars)  ; If it's a vector...
          [vars clauses]    ;  leave it alone,
          [(vector vars)    ;  else wrap it in a vector
            . . .]