Clojure 2024 状况调查! 分享您的看法。

欢迎!请查看 关于 页面以获取更多有关如何使用本网站的信息。

0
Clojure

支持任意函数结构析构,即使用任何函数在任何结构析构形式中来解包数据。

以任意方式。

讨论从这里开始
http://clojure-log.n01se.net/date/2009-11-17.html#09:31c

附件中的补丁实现了此处描述的规范
http://clojure-log.n01se.net/date/2009-11-17.html#10:50a

也就是说,以下示例现在可以工作

user=> (let (link: (-> str a) 1) a)
"1"

user=> (let (link: [a (-> str b) c) (link: 1 2)] (list a b c))
(1 "2" nil)

user=> (let (link: (->> (map int) [a b)) "ab"] (list a b))
(97 98)

8 答案

0

评论者:importer

cgrand 说:我认为当前的补丁也受到了此处描述的问题的影响 http://groups.google.com/group/clojure-dev/msg/80ba7fad2ff04708

0
_评论者:importer_

cgrand 说:这里只允许使用 -> 和 ->>,但如果它们被重命名或遮蔽了怎么办?为了不是测试符号本身,我会检查
* 符号不在 &env 中
* 符号解析为 '#'clojure.core/-> 或 '#'clojure.core/->>


(when-not (&env (first b)) (#{#'clojure.core/-> #'clojure.core/->>} (resolve (first b))))


但这需要更改解构的 sig 以传递环境
0
_评论者:importer_

[email protected] 表示:实际上这里只有 -> 和 ->> 是合法的 —— 如果你在局部将 foo 绑定到 ->,实际上没有什么好理由让 (fn [(foo inc a)] a) 应该工作。而且,如果你在你的命名空间中重新定义了 -> 或 ->> 来表示其他含义,我们在编译时需要捕获吗,还是允许发出重新排列的代码并查看结果?

简而言之,#({-> ->> clojure.core/-> clojure.core/->>}) 是否足够?
0
0

评论者:importer

[email protected] 说:(链接: [file:aHWQ_W06Kr3O89eJe5afGb)]: (链接:PATCH) 支持解构形式中的 -> 和 ->>。

0

评论者:importer

richhickey 说:所以,不要使用 syntax-quote,只使用 clojure.core/->

0

评论人:stu

Rich:你是意外被分配此任务的吗?如果是这样,请撤销你的分配。

0
参考:https://clojure.atlassian.net/browse/CLJ-211(由 alex+import 报告)
...