Julia构造Array{Any}时如何避免元素被自动类型转换
Julia构造Array{Any}保留元素原始类型的解决方案
问题原因
出现元素自动类型转换的核心原因是:当你书写Array{Any}([false, 0.5, 5])时,内层的字面量数组[false, 0.5, 5]会先被Julia自动执行类型提升,生成Vector{Float64}类型的数组后才会传入外层的Array{Any}构造函数,因此最终得到的Any数组元素全为浮点数。
而加入字符串后,内层字面量的多种元素没有可统一提升的公共类型,Julia默认就会生成Vector{Any},再传入外层构造后自然保留原始类型。
最优单行解决方案
直接使用Julia原生的显式类型数组构造语法即可,无需额外操作:
Any[false, 0.5, 5]
运行结果如下:
julia> Any[false, 0.5, 5] 3-element Vector{Any}: false 0.5 5
该语法会直接构造Array{Any},不会提前对元素做类型提升,完全保留所有元素的原始类型。
其他可选方案
如果你的元素已经存储在元组中,也可以使用如下写法:
Vector{Any}((false, 0.5, 5))
内容的提问来源于stack exchange,提问作者Stuart
相关产品推荐
相关产品推荐

