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(由 dnolen 报告)
...