请参与《2024 Clojure状态调查》并分享您的观点!(查看调查)

欢迎!请查阅关于页面了解一些关于此网站的工作方式的信息。

0
Clojure

Clojure 包含一系列组合器,它们的实现方式相似但略有所不同。也就是说,它们在调用一端及其返回的函数上都是完整的多态重载。从外观上看,它们通常会像这样:

`
(defn foo
([f]

 (fn
   ([] do stuff...)
   ([x] do stuff...)
   ([x y] do stuff...)
   ([x y z] do stuff...)
   ([x y z & args] do variadic stuff...)))

([f f2]

 (fn
   ([] do stuff...)
   ([x] do stuff...)
   ([x y] do stuff...)
   ([x y z] do stuff...)
   ([x y z & args] do variadic stuff...)))

([f1 f2 f3]

 (fn
   ([] do stuff...)
   ([x] do stuff...)
   ([x y] do stuff...)
   ([x y z] do stuff...)
   ([x y z & args] do variadic stuff...)))

([f1 f2 f3 & fs]

 (fn
   ([] do stuff...)
   ([x] do stuff...)
   ([x y] do stuff...)
   ([x y z] do stuff...)
   ([x y z & args] do variadic stuff...))))

`

为每个组合器编写这种类型的函数既繁琐又容易出错。

必须有一种方式来实现一个宏,它接受组合器的“规范”,包括

  1. 名称
  2. 文档字符串
  3. 执行操作模板
  4. 执行可变操作模板

并构建出类似于上面的{{foo}}函数。这个宏应该能够实现当前的组合器批量(假设http://dev.clojure.org/jira/browse/CLJ-730 已先完成,以便验证)。

3 个答案

0

评论者:stu

这看起来很有用。Rich,你会接受补丁吗?

0

评论者:stu

别提了,我刚看到Rich已经在开发列表上建议过这个了。随便补丁吧。

0
参考资料:https://clojure.atlassian.net/browse/CLJ-731(由fogus报告)
...