2024年Clojure状况调查!分享您的想法。

欢迎!请查阅关于页面以了解更多关于此功能的信息。

0
core.match

(match [x] [({:a 0 :b 1} :type Foo)] :a0 ...)

:a和:b将被转换为字段访问,即(.-a x)

与原始数组匹配一样,我们应该进行实例检查,然后进行提示字段访问。

我们应该考虑采用deftype/record语法。

8 个答案

0

评论由:dnolen

(match [x] [^Foo {.-bar 5 .-baz 7}] :a0 [^Foo {.-bar _ .-woz 8}] :a1 :else :a2)

鉴于最近ClojureScript属性访问讨论,这种语法似乎适用于高性能属性访问。

也许

(match [^Foo x] [{.-bar 5 .-baz 7}] :a0 [{.-bar _ .-woz 8}] :a1 :else :a2)

但是可能不合适,因为那时我们应该在有人尝试声明不同类型时抛出异常。

0

评论由:pron

嗨。有何计划解决这个问题?

0

评论由:dnolen

我没有具体的计划,它肯定是在0.2.0之后,目前只关注错误。

0

评论由:leonardoborges 提出

我值得接手这个任务吗?

我已经实现了一个非常初级的版本,现在在这里使用:https://github.com/leonardoborges/imminent#pattern-matching

但我非常乐意看到其对扩展和官方支持的想法。有什么看法吗?

0

评论由:dnolen

是的,很高兴看到有人接手这个任务。

0

评论由:leonardoborges 提出

非常好!您有任何提示/指南吗?如果没有,我将从第一原理开始,使用https://github.com/clojure/core.match/wiki/Advanced-usage#participating-in-pattern-matching中的说明。

0

评论由:dnolen

是的,主要问题只是确定一个好的语法。一旦建立,我认为实现它不会太难。

0
参考:[https://clojure.atlassian.net/browse/MATCH-4](https://clojure.atlassian.net/browse/MATCH-4)(由 dnolen 提出)
...