Eri*_*ver 13 clojure type-coercion clojure-java-interop
为什么不(int 10)生成类型的实例java.lang.Integer?
; why Long here?
=> (type (int 10))
; java.lang.Long
; this one is also Long, why not java.lang.Number?
=> (type (num 10))
; java.lang.Long
=> (type (double 10))
; java.lang.Double
=> (type (long 10))
; java.lang.Long
=> (type (float 10))
; java.lang.Float
=> (type (short 10))
; java.lang.Short
=> (type (bigint 10))
; clojure.lang.BigInt
=> (type (bigdec 10))
; java.math.BigDecimal
=> (type (boolean 10))
; java.lang.Boolean
=> (type (char 10))
; java.lang.Character
=> (type (byte 10))
; java.lang.Byte
Run Code Online (Sandbox Code Playgroud)
liw*_*iwp 17
Clojure仅在long内部处理整数.(int)用于将a long转换为int用于调用期望int参数的Java方法.
在这种情况下(int 10)确实返回一个Java int,但Clojure然后将其提升int回来long.(type)用于(class)查找其参数的类型(在本例中),因此将long获取框插入到java.lang.Long.
您可以java.lang.Integer使用java.lang.Integer构造函数或工厂方法之一生成:
user> (type (Integer. 10))
java.lang.Integer
user> (type (Integer/valueOf 10))
java.lang.Integer
user> (type (Integer/decode "10"))
java.lang.Integer
...
Run Code Online (Sandbox Code Playgroud)
(num)将它的参数向上转换为抽象类java.lang.Number,但(type)将返回其参数的实际类型,即java.lang.Long再次.
int是用于互操作调用的转换为原始整数.由于每个类型的调用都会将一个Object东西再次装箱,然后将Clojure(> = 1.3)框用于Long和Double.如果你需要,Integer你必须创建一个.
user=> (type (Integer/valueOf 10))
java.lang.Integer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2024 次 |
| 最近记录: |