Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure中原语和装箱原语版本示例_Clojure_Primitive - Fatal编程技术网

Clojure中原语和装箱原语版本示例

Clojure中原语和装箱原语版本示例,clojure,primitive,Clojure,Primitive,Clojure在哪些地方原样使用Java原语并使用原语的盒装版本 如我所见,Clojure提供了对原语的完全支持。Clojure中何时何地使用原语和装箱版本有明确的定义吗?我不认为Clojure何时使用无装箱数学的规则可以简单地概括为几行(但我可能错了)。但您可以使用将Clojure代码反编译为Java代码,以了解装箱和拆箱的情况。如果我计算这个代码 (ns.decompile) (:require[clj-java-decompiler.core:as d])) (d)反编译 (循环[产品1

Clojure在哪些地方原样使用Java原语并使用原语的盒装版本


如我所见,Clojure提供了对原语的完全支持。Clojure中何时何地使用原语和装箱版本有明确的定义吗?

我不认为Clojure何时使用无装箱数学的规则可以简单地概括为几行(但我可能错了)。但您可以使用将Clojure代码反编译为Java代码,以了解装箱和拆箱的情况。如果我计算这个代码

(ns.decompile)
(:require[clj-java-decompiler.core:as d]))
(d)反编译
(循环[产品1
柜台10]
(如果(=0计数器)
产品
(重复(*产品计数器)
(十二月(()))
它打印出这个代码

//反编译类:游乐场/反编译$fn\uu 7159
打包游乐场;
导入clojure.lang.*;
公共最终类反编译$fn__7159扩展了函数
{
公共静态对象invokeStatic(){
长积=1L;
长乘法;
for(长计数器=10L;0L!=计数器;计数器=数字。十进制(计数器),乘积=乘法){
乘法=数字。乘法(乘积、计数器);
}
返回编号.num(产品);
}
@凌驾
公共对象调用(){
返回invokeStatic();
}
}

在这里,在我看来,编译器似乎理解我们正在使用
long
数字。您可能需要逐个查看装箱是否发生。

您可以在此处找到有关Java interop re基本类型的一些好信息:

您可能还对使用基元数组的此库感兴趣:


我认为可以公平地说,Clojure的引用确实使用了大量的“营销演讲”之类的陈述。更正确的说法是“Clojure为JVM原语提供了有限的支持”。传递值时,装箱当然是默认行为。该网站提供了更多信息。