在clojure宏中嵌套#/%

时间:2012-04-09 05:18:56

标签: macros clojure

我知道嵌套#,%是坏的 - 但是,我经常发现自己编写简短的在线匿名函数,最终只有2个级别的#/%。

因此,我很好奇,有没有办法告诉clojure每个%绑定到最近的(最小的封闭)#?

谢谢!

2 个答案:

答案 0 :(得分:8)

嵌套匿名函数非常好。您只需使用非简写语法。

#(foo (bar %1)
      (baz %2))

相当于

(fn [x y]
  (foo (bar x)
       (bax y)))

完整变体可以任意嵌套。另外,如果您倾向于使用map批次fn,请考虑使用for代替(在我看来这看起来更清晰):

(map (fn [row]
       (map (fn [col]
              (+ (* 10 row) col))
            (range 3)))
     (range 3))

做同样的事情
(for [row (range 3)]
  (for [col (range 3)]
    (+ (* 10 row) col)))

答案 1 :(得分:6)

clojure不支持嵌套匿名函数。

编辑:通过"匿名函数"我的意思是#(...),而不是(fn ...)。为混乱道歉。