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

3.1.2 类型强制限定

当然,在提供数据时,我们可以不让Julia自行确定类型,或者将其转换为指定的类型,做法为:


类型名称(输入值或变量)

这实际是以类似函数的形式对目标类型进行调用(后面我们会知道这其实是类型的一种构造方法)。例如:


julia> x2 = Int32(20)                                         # 字面值20以Int32类型提供
20

julia> typeof(x2)
Int32

julia> x3 = UInt8(20)                                                # 字面值20以UInt8类型提供
0x14

julia> typeof(x3)
UInt8

julia> y1 = Int64(0x14)                                             # 字面值0x14以Int64类型提供
20

julia> typeof(y1)
Int64

julia> y2 = Int8(0b10100)                                           # 字面值0b10100以Int8类型提供
20

julia> typeof(y2)
Int8

或者


julia> UInt32(y2)                                         # 原来的类型为Int8
0x00000014

julia> typeof(ans)
UInt32

julia> Int8(x3)                                          # 原来的类型为UInt8
20

julia> typeof(ans)
Int8

但如果限定的类型无法表达原始数值,Julia会报异常,例如:


julia> UInt16(0x14FFF)
ERROR: InexactError: trunc(UInt16, 86015)

julia> Int64(bign)
ERROR: InexactError: trunc(Int64, 300000000000000000000000)

所以,类型的确定需要综合考虑各类型的表达能力以及内存管理方面的情况,确保在资源节约的情况下,不会导致数据的表达出现类似上述的截断性错误。