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 提出)
...