来自core.match
, url的示例代码:https : //github.com/clojure/core.match/wiki/Basic-usage
(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
为什么我们只能匹配一个‘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
你可以; 或者至少,这就是我从阅读推断的源代码和文档match
。
的来源match
从以下几行开始:
(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,然后问题不需要包装在向量中。
那么他们为什么要展示带有向量的例子呢?可能是为了语法的一致性。这可能有助于理解这样一个简单、基本的概述。在使用和不使用矢量之间来回切换将需要解释何时需要矢量,这会减损页面的主要观点。
编辑:实际上,它确实在顶部的该页面上明确说明您可以匹配未包装的值。您可以通过在match x
该页面上搜索来找到它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句