gpt4 book ai didi

java - 来自 clojure.java.api.Clojure 的意外行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:11:28 25 4
gpt4 key购买 nike

我一直在试验 clojure.java.apiClojure 1.6.0 中引入,因为我想将一些 Clojure 功能导入到我的 java 项目中。不幸的是,当我从 Java 调用条件函数 andor 时,它的行为并不像我预期的那样。

IFn and = Clojure.var("clojure.core", "and");
IFn or = Clojure.var("clojure.core", "or");

-- equivalent to (and true false) in clojure
and.invoke(true,false); --> returns true rather than false???

-- equivalent to (or true false) in clojure
or.invoke(true,false); --> returns null rather than true???

-- equivalent to (and true true) in clojure
and.invoke(true,true); --> returns true as expected

-- equivalent to (or true true) in clojure
or.invoke(true,true); --> returns null rather than true???

我不敢相信这是一个错误,所以我怀疑我遗漏了一些与 API 相关的相当基础的东西。不管是什么原因,它让我很困惑。如果有人可以提供解释,我将不胜感激。

谢谢,

马特。

最佳答案

andor 是宏,它们的求值规则有些不同。例如,在 Clojure REPL 上,尝试评估 and 会抛出 CompilerException java.lang.RuntimeException: Can't take value of a macro: #'clojure.core/and, compiling: (NO_SOURCE_PATH:0:0)

虽然应该有一种方法可以通过 clojure.java.api.Clojure 使用它们,但是我现在还没有弄清楚,因为需要编译宏才能工作。

我能想到的下一个最佳选择是使用 eval,但我不确定这是否是您想要做的事情。另一方面,为什么在旧的 &&/|| Java 运算符存在时使用 and/or 呢?

关于java - 来自 clojure.java.api.Clojure 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27482172/

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