首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个core.match绑定示例是如何工作的?

这个core.match绑定示例是如何工作的?
EN

Stack Overflow用户
提问于 2020-05-09 10:09:56
回答 1查看 53关注 0票数 3

参见此示例

代码语言:javascript
复制
(let [x 1 y 2]
  (match [x y]
    [1 b] b
    [a 2] a
   :else nil))
;=> 2

我想不出几件事来:

  1. 1是否匹配x并绑定到b
  2. 2是否匹配y并绑定到a
  3. 假设以上两点正确,那么为什么返回a而不是b,因为它们都匹配[x y]的一部分。是因为这是最后一条吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-09 10:49:26

将每个模式视为要与输入的[x y][1 2]匹配的模板。

第一种模式是[1 b],它与输入匹配,因为第一个模板项是一个匹配的文字值1,而第二个模板项是一个绑定,它将在输入的那个位置保存任何值,在本例中恰好是2。可以从match子句的右侧访问b绑定,就好像它是let绑定一样。

这个例子可能会更清楚地说明:

代码语言:javascript
复制
(let [x 1 y 2]
  (match [x y]
    [1 b] [1 (inc b)] ;; recreate the input with (inc b)
    [a 2] a           ;; this never matches because prior match works
    :else nil))
=> [1 3]

2是否匹配y并绑定到a

模式是匹配的,但并不重要,因为前面的模式已经匹配了。如果是成功的匹配,a将绑定到1

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

https://stackoverflow.com/questions/61695034

复制
相关文章

相似问题

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