上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值。