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
参考:[链接到MATCH-4问题](https://clojure.atlassian.net/browse/MATCH-4)(由 dnolen 提出)
...