以下代码展示了我想在java静态方法上复制的语义
((partial apply (fn [x y] (print x y \newline))) ["one" "two"])
一两个
零
但是,在静态方法上进行求值时,会抛出以下异常。
((partial apply File/createTempFile) ["hello" ".txt"])
CompilerException java.lang.RuntimeException:无法在类java.io.File中找到静态字段:createTempFile,编译:(NO_SOURCE_PATH:50)
有没有办法在第二种情况下使用静态方法实现第一种情况?
答案 0 :(得分:5)
apply需要一个clojure函数(实现iFn),因此你需要在匿名函数中包装静态方法调用。
user> ((partial apply #(java.io.File/createTempFile %1 %2) ["hello" ".txt"]))
#<File /tmp/hello8601033663867010647.txt>
或没有部分:
user> (apply #(java.io.File/createTempFile %1 %2) ["hello" ".txt"])
#<File /tmp/hello2555220024359994482.txt>