Clojure REPL,互操作,无法解析符号
Clojure REPL, interop, Unable to resolve symbol
假设 files
是 Clojure 中 Java 的列表 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 中的列表。
你可以使用 memfn
(有些人说你不应该使用,不记得为什么,欢迎评论)或者只是一个 lambda:
(map (memfn getName) files) ;;#1
(map #(.getName %) files) ;;#2
至于为什么,因为这些是方法而不是函数。
假设 files
是 Clojure 中 Java 的列表 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 中的列表。
你可以使用 memfn
(有些人说你不应该使用,不记得为什么,欢迎评论)或者只是一个 lambda:
(map (memfn getName) files) ;;#1
(map #(.getName %) files) ;;#2
至于为什么,因为这些是方法而不是函数。