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