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