Clojure REPL,互操作,无法解析符号

时间:2017-04-19 08:30:18

标签: java clojure clojure-java-interop

假设files是Clojure中Javas File的列表,我想获取文件名列表。在Leiningen REPL,我可以使用,比方说,

(.getName (nth files 4))
=> "image.jpg"

但如果我使用

(map .getName files)

REPL抛出CompilerException java.lang.RuntimeException: Unable to resolve symbol: .getName in this context。那是为什么?

我可以用

来解决这个问题
(defn gn [file] (.getName file))
(map gn files)

但我想现在,如果有更优雅的方法将Java方法映射到Clojure中的列表。

1 个答案:

答案 0 :(得分:4)

你可以使用memfn(有人说你不应该使用,不记得原因,欢迎评论)或只是一个lambda:

(map (memfn getName) files)   ;;#1
(map #(.getName %) files)     ;;#2

至于为什么,因为这些是方法而不是功能。