5

我知道嵌套#,% 是不好的——但是,我经常发现自己编写简短的在线匿名函数,这些函数最终正好有2 层#/%。

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

谢谢!

4

2 回答 2

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)))
于 2012-04-09T21:10:08.033 回答
6

clojure 不支持匿名函数的嵌套。

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

于 2012-04-09T06:14:10.740 回答