例如
(map #(+ 10 %1) [ 1 3 5 7 ])
将为所有内容添加10
假设我想将所有内容映射到常量1.我试过
(map #(1) [ 1 3 5 7 ])
但我不了解编译错误。
答案 0 :(得分:14)
(map #(1) [ 1 3 5 7 ])
不会有两个原因:
#(1)
是一个零参数的匿名函数,因此它不适用于map(当与一个输入序列一起使用时需要一个参数函数)。(1)
这样的函数 - 例如,如果你想看到这个错误,请尝试(#(1))
以下是一些可行的替代方案:
; use an anonymous function with one (ignored) argument
(map (fn [_] 1) [1 3 5 7])
; a hack with do that ignores the % argument
(map #(do % 1) [1 3 5 7])
; use a for list comprehension instead
(for [x [1 3 5 7]] 1)
; use constantly from clojure.core
(map (constantly 1) [1 3 5 7])
在上述内容中,我认为使用constantly或for的版本应该是首选 - 这些版本更清晰,更具惯用性。
答案 1 :(得分:11)
匿名函数#(+ 10 %1)
相当于:
(fn [%1] (+ 10 %1))
#(1)
相当于:
(fn [] (1))
尝试将1
作为一个没有args的函数调用就行不通了。
答案 2 :(得分:9)