我正在研究 Clojure 的乐趣(我知道它是为 Clojure 1.2 编写的),并且我试图了解一些关于amap
和相关功能的东西。
如果没有类型提示,以下代码在 Clojure 1.4 中不起作用:
(defn asum-sq [xs]
(let [dbl (amap xs i ret
(* (aget xs i)
(aget xs i)))]
(areduce dbl i ret 0.0
(+ ret (aget dbl i)))))
回复:
user=> (asum-sq (float-array [1 2 3 4]))
IllegalArgumentException No matching method found: aset clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)
添加了类型提示的版本有效:
(defn ^Double asum-sq [^floats xs]
(let [^floats dbl (amap xs i ret
(* (aget xs i)
(aget xs i)))]
(areduce dbl i ret 0.0
(+ ret (aget dbl i)))))
回复:
user=> (asum-sq (float-array [1 2 3 4]))
30.0
我很难找到有关此问题的信息。究竟是什么时候引入了这一重大变化?还是我理解错了?