Clojure:what';[D和[Ljava.lang.Double;]之间的区别是什么;?
我正在尝试使用本机Java数组做一些工作,但我不理解两个双数组实例化之间的区别。这与装箱和取消装箱值有关吗?在Clojure:what';[D和[Ljava.lang.Double;]之间的区别是什么;?,java,clojure,Java,Clojure,我正在尝试使用本机Java数组做一些工作,但我不理解两个双数组实例化之间的区别。这与装箱和取消装箱值有关吗?在下面的所有情况下(首先…)每个数组的类型都是java.lang.Double。Clojure协议似乎对这种区别很敏感 user> (class (make-array Double/TYPE 3)) ;; [D user> (class (double-array [1 2 3])) ;; [D user> (class (into-array (make-
下面的所有情况下(首先…)
每个数组的类型都是java.lang.Double。Clojure协议似乎对这种区别很敏感
user> (class (make-array Double/TYPE 3)) ;; [D
user> (class (double-array [1 2 3])) ;; [D
user> (class (into-array (make-array Double/TYPE 3))) ;; [Ljava.lang.Double;
user> (class (into-array (double-array [1 2 3]))) ;; [Ljava.lang.Double;
user> (class (into-array (repeat 2 (double-array [1 2 3]) ))) ;; [[D
双数组已解除绑定。当您从数组中访问项目时,Clojure会自动将其装箱,除非您使用需要该类型的类型提示函数访问该项目。需要考虑两种不同类型的数组:
是一个原语双数组,相当于Java[D
double[]
是一个包含[Ljava.lang.Double;
引用的数组,相当于JavaDouble
Double[]
FWIW,有几个库可以使使用双数组进行操作变得简单。特别是您应该检查(专门的数组操作),(支持多种类型的向量/矩阵操作,包括双数组)和(与core.matrix一起使用,将双数组包装为通用向量)这里有JVM签名的描述:谢谢,这很有意义。为什么
(进入数组(双数组…)
返回一个装箱值数组,而(进入数组(重复2(双数组…))
返回一个未装箱值数组?(进入数组(重复2(双数组…)
返回基本双精度数组的数组,而不是非固定双精度数组。