gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:11:26 26 4
gpt4 key购买 nike

考虑 .indexOf 函数。我知道我可以调用 (.indexOf [1 2 3] 2) 如果我只需要立即使用该函数。但是,如果我想将该函数作为参数传递给其他某个函数(例如 map)怎么办?以下不起作用,返回 CompilerException“无法解析符号”:

(map .indexOf [[1 2 3] [4 5 6]] [2 4])

显然,我可以将对 .indexOf 的调用包装在某个匿名函数中以达到相同的效果:

(map #(.indexOf %1 %2) [[1 2 3] [4 5 6]] [2 4])

但这不是我要问的。是否有另一种引用 .indexOf 的方法,这样就不需要包装函数了?如果这不可能,是否有充分的理由不支持它?

最佳答案

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

正如 Alister Lee 所指出的,您可以使用 memfn 来包装方法调用。但是如果你检查 documentation您会发现您提到的匿名函数方法是执行您要求的首选方法。

关于java - 在 clojure 中,当不立即调用时如何引用 java 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19397507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com