Clojure地图匿名函数

时间:2018-01-10 14:06:46

标签: clojure

我正在尝试将匿名函数映射到集合,并且我得到了ClassCastException。

(defn mapanfn
  [names]
  (map (#(str "Hello %"))
       names))

(mapanfn ["Bobby" "Nico" "Ringo"])

谢谢, R上。

2 个答案:

答案 0 :(得分:5)

只需取出匿名函数周围的额外括号,如果要使用格式说明符,请使用(defn mapanfn [names] (map #(format "Hello %s" %) names))

str

或者在没有格式说明符的情况下使用(defn mapanfn [names] (map #(str "Hello " %) names))

%

在这两种情况下,-bash指的是调用匿名函数的值,但它不会在里面字符串中起作用。

答案 1 :(得分:1)

你在这里犯了几个错误。

第一个,%符号不应该是字符串的一部分。也许您将它与标准format函数混淆了。因此,表达式应为(str "Hello " %)(format "Hello %s" %)

第二个,由于额外的parens,你将你的匿名函数称为两次。 #(str "Hello %")表达式返回一个函数,但是将它放入parens会再次调用它并给出一个字符串"Hello %"。所以在map函数中,你试图将一个字符串作为一个函数来调用,它正在调用一个Exception。

示例中的正确功能只是#(str "Hello " %)