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
...