Clojure имеет дело только с long
целыми числами внутри.(int)
используется для приведения long
к int
для вызова методов Java, которые ожидают аргумент int
.
В этом случае (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
...
(num)
передаст свой аргумент абстрактному классу java.lang.Number
, но (type)
вернет фактический тип своего аргумента, то есть java.lang.Long
снова.