est*_*lua 5 clojure pattern-matching
现在支持吗?我能找到的唯一信息是维基(https://github.com/clojure/core.match/wiki/Deftype-and-defrecord-matching)中的示例,它会产生错误:
CompilerException java.lang.AssertionError:无效的列表语法(Red.(Red.axb)yc)in(Black.(Red.(Red.axb)yc)zd).有效语法:[[:default:guard] [:或:default] [:default:only] [:default:seq] [:default:when] [:default:as] [:default:<<] [:default :clojure.core.match /载体]]
这尚未实现,但由于记录的行为类似于地图,您可以执行以下操作:
(defrecord ab [a b])
user.ab
user> (let [x (->ab 1 1)]
(match [x]
[{:a _ :b 2}] :a0
[{:a 1 :b 1}] :a1
[{:c 3 :d _ :e 4}] :a2
:else nil))
:a1
Run Code Online (Sandbox Code Playgroud)
你也可以根据记录的类型进行匹配,但这有点不优雅。
user> (let [x (->ab 1 1)
aba user.ab]
(match [(type x) x]
[aba {:a _ :b 2}] :a0
[aba {:a 1 :b 1}] :a1
[aba {:c 3 :d _ :e 4}] :a2
:else nil))
:a1
Run Code Online (Sandbox Code Playgroud)
https://github.com/clojure/core.match/wiki/Basic-usage#map-patterns
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |