首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在clojure中,为什么要在向量中core.match一个映射?

在clojure中,为什么要在向量中core.match一个映射?
EN

Stack Overflow用户
提问于 2019-08-09 14:47:55
回答 1查看 90关注 0票数 0

来自core.match的示例代码,url:https://github.com/clojure/core.match/wiki/Basic-usage

代码语言:javascript
复制
(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’?为什么我们不能这么做?

代码语言:javascript
复制
(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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-09 16:08:06

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

match的来源从行开始:

代码语言:javascript
复制
(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来找到它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57432495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档