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