In Julia, every value has a type, for example, typeof(2)
is Int64
(or Int32
on 32-bit systems). Julia has a lot of built-in types, in fact, a whole hierarchy starting from the type Any
at the top. Every type in this structure also has a type, namely, DataType
, so it is very consistent. typeof(Any)
, typeof(Int64)
, typeof(Complex{Int64})
, and typeof(DataType)
all return DataType
. So, types in Julia are also objects; all concrete types, except tuple types, which are a tuple of the types of its arguments, are of type DataType
.
This type hierarchy is like a tree; each type has one parent given by the supertype
function:
supertype(Int64)
returnsSigned
supertype(Signed)
returnsInteger
supertype(Integer)
returnsReal
supertype(Real)
returnsNumber
supertype(Number)
returnsAny
supertype(Any)
returnsAny
A type can have a lot of children or subtypes
(a function from the InteractiveUtils
package) as follows...