在clojure中,为什么要在向量中匹配地图?
从core.match的示例代码中,url: 为什么我们只能匹配一个“x”?我们为什么不能那样做在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
(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
. . .]