来自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发布于 2019-08-09 16:08:06
你可以;或者至少这是我从阅读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
. . .]文件还包含以下内容:
。。。可以选择使用没有包装在向量中的单个变量,然后问题不必包装在向量中。
那么,他们为什么要用向量来显示例子呢?可能是语法的一致性。这可能有助于理解一个简单的,基本的概述,像这样。在使用和不使用向量之间来回切换将需要解释什么时候向量是必要的,这将从页面的主要点减少。
编辑:实际上,它在顶部执行在那一页上显式解释,您可以在未包装的值上进行匹配。您可以通过在该页面上搜索match x来找到它。
https://stackoverflow.com/questions/57432495
复制相似问题