为什么trim()在Clojure中的地图内部不起作用?

时间:2013-12-19 14:57:37

标签: clojure

user=> (.trim "   kkk   ")
"kkk"
user=> (map .trim ["jjj " "  llll" " o "] )

CompilerException java.lang.RuntimeException: Unable to resolve symbol: .trim in this context, compiling:(NO_SOURCE_PATH:1:1) 

对此行为的任何解释?

我最终使用了clojure.string / trim。但想知道,这里的概率是什么?

3 个答案:

答案 0 :(得分:4)

这有效:

(map #(.trim %) ["jjj " "  llll" " o "] )

所以我猜.trim是一种在形式之外没有意义的语法糖?

答案 1 :(得分:4)

您需要将.trim包装在匿名函数中,以便map获取第一类函数而不是成员函数:

(map #(.trim %) ["jjj " "  llll" " o "])

或者,您可以使用memfn为您创建此第一类功能:

(map (memfn trim) ["jjj " "  llll" " o "])

答案 2 :(得分:1)

你不能使用这样的成员函数。这不是Clojure功能。最简单的方法是使用闭包。

(map #(.trim %) ["  aa " "  bb "])

您还可以使用memfn将成员函数转换为Clojure函数。