2
files
はClojureのJavas File
のリストで、ファイル名のリストを取得したいとします。私が使用することができますLeiningenをREPLでは、Clojure REPL、interop、シンボルを解決できません
(.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)
でこの問題を回避することができますが、Clojureの中リストへのJavaメソッドをマッピングするために、よりエレガントな方法がある場合、私は今したいと思います。これらの方法ではなく機能しているだけでなくので、なぜ、用として
(map (memfn getName) files) ;;#1
(map #(.getName %) files) ;;#2
:
Googleグループのクイック検索がありました。Rich Hickey自身から:['memfn preceded#()、後者が優先されました'](https://groups.google.com/d/ msg/clojure/Xx-zt7LYzUI/kUQDg1DDNOsJ)。 – glts
@gltsありがとうございます、はい、私はまた、ドキュメント内にまったく同じステートメントを見つけましたが、私はそれが好まれている理由をもっと探していましたか? – Shlomi
私は 'memfn'としてこれを読んでいます。 '#()'表記が最初からあった場合、 'memfn'はcoreに追加されませんでしたので、強く非難されるかもしれません。 – glts