在clojure中,如何在不立即调用时引用java函数?

met*_*ous 3 java clojure

考虑这个.indexOf功能.(.indexOf [1 2 3] 2)如果我只需要立即使用该功能,我就可以打电话给我.但是如果我想将函数作为参数传递给其他函数,例如map?以下不起作用,返回CompilerException"无法解析符号":

(map .indexOf [[1 2 3] [4 5 6]] [2 4])
Run Code Online (Sandbox Code Playgroud)

显然我可以将一个.indexOf匿名函数内部的调用包装到同样的效果:

(map #(.indexOf %1 %2) [[1 2 3] [4 5 6]] [2 4])
Run Code Online (Sandbox Code Playgroud)

但这不是我要问的.还有另一种方式可以引用.indexOf包装函数吗?如果这是不可能的,是否有充分的理由不支持这个?

小智 5

Clojure函数是IFn接口的实例,这意味着它们可以被调用.另一方面,java方法不实现接口,不能用作高阶函数.

正如Alister Lee指出的那样,你可以使用memfn来包装方法调用.但是如果你查看文档,你会发现你提到的匿名函数方法是你要求的首选方法.