You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建Vector{Any}?简化任意类型数组创建及构造疑问

问题解答

一、创建可容纳不同类型NamedTuple的数组(避免冗余类型声明)

你遇到的问题是fill((; some=missing), 10)创建的数组元素类型被推断为NamedTuple{(:some,), Tuple{Missing}},因此无法存入some=1(其类型为NamedTuple{(:some,), Tuple{Int64}})。

有两种简洁的解决方式:

  1. 直接创建Any类型数组并填充
    先初始化一个Any类型的未初始化数组,再用fill!填充初始值:

    values = Vector{Any}(undef, 10)
    fill!(values, (; some=missing))
    values[1] = (; some=1)  # 现在可以正常赋值
    
  2. 显式指定宽泛的NamedTuple类型
    如果不想用Any,可以指定元素类型为支持Missing和任意值的NamedTuple,写法比你原来的更简洁:

    values = fill(NamedTuple{(:some,), Tuple{Union{Missing, Any}}}((some=missing,)), 10)
    values[1] = (; some=1)
    

    这里通过Union{Missing, Any}让NamedTuple的some字段接受任意类型,同时保留缺失值支持。

二、关于Any类型数组的构造问题

Vector{Any}(undef, 10)可行是因为这是Julia内置的未初始化数组构造语法:Vector{T}(undef, n)用于创建长度为n、元素类型为T的未初始化数组。

而Vector{Any}((; some=missing), 10)失败的原因是Julia没有提供这种构造方法。如果要创建填充了指定值的Any类型数组,正确的写法是:

# 方法1:先初始化未初始化数组,再填充
values = Vector{Any}(undef, 10)
fill!(values, (; some=missing))

# 方法2:将填充后的数组转换为Any类型
values = Vector{Any}(fill((; some=missing), 10))

内容的提问来源于stack exchange,提问作者Alex Craft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 05:12:12