gpt4 book ai didi

java - 如何生成clojure代码在运行时调用java方法?

转载 作者:行者123 更新时间:2023-11-30 10:37:12 25 4
gpt4 key购买 nike

我想在 Clojure 函数中使用 Java 反射方法。我认为 (.toString {:a 1}) 之类的代码将由 clojure 阅读器解析和编译。所以,它通过使用 clojure 宏来工作。但是如果我想定义一个在运行时调用java对象方法的函数,它就失败了。我不知道如何在 clojure 中调用这种代码。

这是我的演示代码:

 (def jmethod ".toString")
(defn call-java-method [mname & body]
(let [fn1 (fn [] `(~(symbol mname) ~@body))]
(fn1)))

user=> (call-java-method jmethod 3.4M)

结果是一个列表 (.toString 3.4M) ,但我想将此列表作为 clojure 函数调用进行评估。

最佳答案

您已经意识到,由于宏“在编译时运行”,您基本上不能使用它们来调用动态解析的方法。

你有两个选择:

  1. 使用 Java Reflection API
  2. 使用clojure.core/eval ,包括使用 Clojure 作为运行时编译器来编译您的代码,然后执行它。

关于java - 如何生成clojure代码在运行时调用java方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40200248/

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