实用类型
无
类型 Nothing
具有的唯一值是 nothing
。 它对应 C
中的 void
,也广泛用于普通变量的初始化、保留值等。
nothing
会被 REPL 显示为空:
julia> "a"; nothing
julia> x = nothing
未定义
类型名为 UndefInitializer
,通常用于数组初始化,可以用 undef
作为 UndefInitializer()
的缩写,详细信息见此。
元组
Tuple
类型的实例可以容纳任意有限多个数据,这在你不希望创建新类型,而又想表达有一定复杂性的数据时显得尤为方便。对于更复杂的情况,则可以使用具名元组类型。
julia> tup = (1, 2, 3)
(1, 2, 3)
julia> typeof(tup) # 这表明 tup 的 3 个参数类型均为 Int64
Tuple{Int64, Int64, Int64}
julia> Tuple{Vararg{Int64, 3}} # 一种仅对 Tuple 有效的简写方式
Tuple{Int64, Int64, Int64}
julia> isa(tup, NTuple{3, Int}) # 另一种写法
true
julia> tup[1] # 获取第一个数据
1
julia> (1, 2, 3) == (1, 2, 4) # 多个元素比较的一种简便方法
false
除了按照索引获取数据外,还可以使用以下语法糖
julia> a, b, c = (1, 2, 3)
(1, 2, 3)
julia> (a, b, c) = (1, 2, 3)
(1, 2, 3)
julia> _, d, _ = (1, 2, 3) # _ 的含义为相应的值被主动忽略
(1, 2, 3)
julia> d
2
julia> e = (false, ) # 因为 (false) 会变成 false
(false,)
julia> length(e)
1
对
julia> pair = Pair(1, 2)
1 => 2
julia> pair.first
1
julia> pair.second
2
注意不要将元组与对搞混
共用
可以使用 Union{Type1, Type2...}
声明一个新类型,它的实例可以取 Type1
、Type2
等等中任一个。
julia> MyType = Union{Bool, Int, Float64}
Union{Bool, Float64, Int64}
julia> isa(true, MyType)
true
julia> un:: MyType = 1
1
julia> un = 1.0
1.0
区分
尽管 missing
,nothing
与 undef
都表示值的缺失,它们在语义上可以区分。
missing
一般用于三值逻辑或在概率统计中,表明这个值是缺失的nothing
一般用于表明函数没有返回值或参数不设定默认值undef
用于数组的初始化,如Array{Float64,2}(undef, 4, 4)
,表示直接使用分配的内存里原先的数据。一般不会被混淆。
nothing
和 missing
如何处理取决于包的具体实现。