Julia语言程序设计
上QQ阅读APP看书,第一时间看更新

6.4.2 类型断言

弱类型在对变量控制方面更为简单、轻松,但在计算操作中,仍需要明确的数据或值的内存结构,即表明了数据或值内部表达方式的类型定义。在开发中,必要时可通过操作符::对值的类型进行“断言”,以判断其是否为某个类型。例如:


julia> 1::Int64
1

julia> a = Int32(1)
1

julia> a::Int32
1

julia> a::Int64
ERROR: TypeError: typeassert: expected Int64, got Int32

可见断言表达式会在类型相容(匹配)时返回原值,否则上报TypeError异常。

这种断言操作对抽象类型同样有效:如果值的具体类型是被断言类型的子类型,断言也会成立。例如:


julia> 1::Number
1

julia> a::Real
1

当然,在断言之前我们也可以通过isa()函数判断某个值是否为给定类型的实例,例如:


julia> a = 1;

julia> isa(1, Int32)
false

julia> isa(a, Int64)
true

这样,在预先知道值不是指定类型的对象时,可提前给予恰当的处置,不会像断言那样让程序报错中断。

同样,该函数也适用于抽象类型,例如:


julia> isa(1, Integer)
true

julia> isa(2.3, Float64)
true

julia> isa(2.3, Real)
true

julia> isa(2.3, Any)
true

此时若第一个参数(值)的具体类型是第二个参数(类型)的子类型,isa()便会取true值,否则会返回false值。