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