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

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