参见此示例
(let [x 1 y 2]
(match [x y]
[1 b] b
[a 2] a
:else nil))
;=> 2我想不出几件事来:
1是否匹配x并绑定到b2是否匹配y并绑定到aa而不是b,因为它们都匹配[x y]的一部分。是因为这是最后一条吗?发布于 2020-05-09 10:49:26
将每个模式视为要与输入的[x y]或[1 2]匹配的模板。
第一种模式是[1 b],它与输入匹配,因为第一个模板项是一个匹配的文字值1,而第二个模板项是一个绑定,它将在输入的那个位置保存任何值,在本例中恰好是2。可以从match子句的右侧访问b绑定,就好像它是let绑定一样。
这个例子可能会更清楚地说明:
(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。
https://stackoverflow.com/questions/61695034
复制相似问题