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