gpt4 book ai didi

java - Clojure函数评估

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

我正在寻找 Clojure 对数函数,结果发现确实没有适用于 v1.3+ 的函数。我花了这么长时间才调用 Math/log 是这样的:

user=> Math/log

CompilerException java.lang.RuntimeException: Unable to find static field: log in class java.lang.Math, compiling:(NO_SOURCE_PATH:0:0)

我尝试了诸如(use 'java.lang.Math)之类的变体。直到我尝试了一个示例,我才发现它毕竟在那里:

user=> (Math/log 10)
2.302585092994046

这肯定是设计使然,但原因是什么?

最佳答案

从 Java 导入的静态方法不是 Clojure 函数或任何其他类型的 Clojure 对象。即使上下文正在寻找函数,编译器也会将任何不匹配报告为缺失字段。所有这些...

Math/log
(Math/log)
(map Math/log (range 1 5))

...产生这样的错误。

对于相应的 Clojure 函数:

  • inc 返回函数;
  • (inc) 报告 ...args(0) 数量错误 ...;
  • (map inc (range 1 5)) 返回 (2 3 4 5)

您可以将 Java 方法包装为 Clojure 方法:

(defn log [x] (Math/log x))

...得到预期的结果:

(map log (range 1 5))
;(0.0 0.6931471805599453 1.0986122886681098 1.3862943611198906)

Clojure Java Interop页面推荐

(map #(数学/log %)(范围 1 5))

...在这种情况下。

关于java - Clojure函数评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31843896/

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