gpt4 book ai didi

function - 将java方法名称作为clojure中的函数arg

转载 作者:行者123 更新时间:2023-12-04 22:09:13 25 4
gpt4 key购买 nike

全部,

我想创建一个函数,该函数接受一个表示 java 方法的符号并将其应用于某个对象:

(user=> (defn f [m] (. "foo" (m)))

当我执行此操作时,我得到的结果与我的预期大不相同
user=> (f 'getClass)
java.lang.IllegalArgumentException: No matching method found: m for class java.lang.String (NO_SOURCE_FILE:0)

2个问题:

1> 为什么符号 m 被称为 '.' 的第二个参数函数而不是绑定(bind)到 m 的值?

2> 我将如何做我想做的事?

最佳答案

它不起作用,因为 .special form并且有特殊的评价规则。普通函数调用会计算它们的参数,但是 .不评估方法名称参数。

要使其正常工作,请使用 eval或将您的功能更改为宏。

user=> (defmacro foo [o m] `(. ~o ~m))
#'user/foo
user=> (foo 123 toString)
"123"
user=> (defn bar [o m] (eval `(. ~o ~m)))
#'user/bar
user=> (bar 123 'toString)
"123"

使用 eval一般不推荐。

关于function - 将java方法名称作为clojure中的函数arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719252/

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