如何输入提示
我将如何输入提示以摆脱剩余的反射电话?
(def B
(amap ^"[[D" A i ^"[[D" B
(amap ^doubles (aget A (int i)) j ^doubles row
(* 2 (aget row (int j))))))
还有两个反射电话,但我不知道如何摆脱它们。
您不会显示完整的代码或反射警告,但如果它们是我认为的那样,则需要:
(def ^"[[D" A ...)
无论你在哪里定义它 (double (* 2 ...))
提出这些修复的过程是在宏上执行宏展开,运行该版本,查看导致反射警告的表达式,修复它们,并希望可以将提示改进为原始宏,在这种情况下可能。 我仍然建议更直接的解决方案。
恕我直言,这是更容易做没有amap宏:
(set! *warn-on-reflection* true)
(def ^"[[D" A (into-array [(double-array [0 1 2]) (double-array [2 3 4])]))
(def ^"[[D" B (into-array (map aclone A))) ; aclone is shallow
(dotimes [i (alength B)]
(let [^doubles row (aget B i)]
(dotimes [j (alength row)]
(aset row j (double (* 2 (aget row j)))))))
(doseq [row B]
(prn (vec row)))
这个页面(最后)提供了关于类型提示的很好的信息:http://clojure.org/java_interop。 它建议使用eg(let [n(int)])而不是^ Integer等,这也使得代码更具可读性。 请注意,互联网上的很多资料似乎都是针对较早版本的Clojure,而您在1.2中需要较少的提示。
链接地址: http://www.djcxy.com/p/48097.html上一篇: How to type hint