为什么这个列表理解返回一个数组{Any,1}而不是一个数组{Symbol,1}?

 小景森的童年 发布于 2022-12-04 01:44

当我尝试Array使用列表推导创建一个时,Array{Any, 1}即使我将所有元素编码为"symbol" ,它也会产生:

julia> u_col_names=[symbol("user_id"), symbol("age"), symbol("sex"), symbol("occupation"), symbol("zip_code")]
5-element Array{Symbol,1}:
 :user_id   
 :age       
 :sex       
 :occupation
 :zip_code 

julia> col_names=["user_id", "age", "sex", "occupation", "zip_code"]
5-element Array{ASCIIString,1}:
 "user_id"   
 "age"       
 "sex"       
 "occupation"
 "zip_code"  

julia> u_col_names=[symbol(col_names[i]) for i in 1:size(col_names)[1]]
5-element Array{Any,1}:
 :user_id   
 :age       
 :sex       
 :occupation
 :zip_code 

为什么最后一个列表理解返回Array{Any, 1}而不是Array{Symbol, 1}?请注意,以下内容确实返回Array{Symbol, 1}:

julia> u_col_names=[symbol("col_names$i") for i in 1:size(col_names)[1]]
5-element Array{Symbol,1}:
 :col_names1
 :col_names2
 :col_names3
 :col_names4
 :col_names5

有趣的是,以下内容也是如此:

julia> col_names[1]
"user_id"

julia> symbol(col_names[1])
:user_id

julia> [symbol(col_names[1]), symbol(col_names[2])]
2-element Array{Symbol,1}:
 :user_id
 :age    

我错过了什么?

1 个回答
  • 根据GitHub上回购问题跟踪器中的讨论,问题似乎源于Julia的类型推理系统的缺陷.Jeff Bezanson(朱莉娅作家和维护者之一)在另一场讨论中留下了相关评论:JuliaLang/julia

    目前实际上预计会出现此行为.由于[ col_names]是全局的,它可能会在任何地方改变,所以我们不能假设我们知道它的类型.这是过于悲观,但很难提出一个让我们做得更好的规则.

    令人惊讶的是,也许(如John Myles White所观察到的),如果这些操作是在函数内部执行的,则正确推断出类型:

    julia> function fun()
             col_names=["user_id", "age", "sex", "occupation", "zip_code"]
             return u_col_names=[symbol(item) for item in col_names]
           end
    fun (generic function with 1 method)
    
    julia> fun()
    5-element Array{Symbol,1}:
     :user_id   
     :age       
     :sex       
     :occupation
     :zip_code
    

    至于你的列表理解的选择,你可以使用map(symbol, <Array{T,1}>),这确实返回Array{Symbol,1},即使在全球范围内,:

    julia> col_names=["user_id", "age", "sex", "occupation", "zip_code"]
    5-element Array{ASCIIString,1}:
     "user_id"   
     "age"       
     "sex"       
     "occupation"
     "zip_code"  
    
    julia> map(symbol, col_names)
    5-element Array{Symbol,1}:
     :user_id   
     :age       
     :sex       
     :occupation
     :zip_code 
    

    2022-12-11 03:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有