通常,不清楚类型的中性值是什么。因此,您必须为每个类型定义自己的函数,例如
String
s:
neutral(::Type{String}) = " "
对于
Number
zero
功能:
neutral{T<:Number}(::Type{T}) = zero(T)
a的中性元素
Dict
有点复杂:
neutral{T<:Dict}(::Type{T}) = T()
neutral{V}(::Type{Dict{TypeVar(:K),V}}) = Dict{Any, V}()
neutral{K}(::Type{Dict{K}}) = Dict{K, Any}()
作为回退,您仍然可以在注释中使用空字符串:
neutral(x) = ""
最后,您可以定义一个函数将中性元素推送到数组:
push_neutral!{T}(a::AbstractArray{T}) = push!(a, neutral(T))
例如:
push_neutral!([Dict(1=>2), Dict("1"=>2)])
3-element Array{Dict{K,Int64},1}:
Dict(1=>2)
Dict("1"=>2)
Dict{Any,Int64}()
字典
.由于参数所示的混合类型
K
,仅这三个定义中的第一个定义是不够的。
编辑:将此函数应用于
字典
a
持有所有
Array
s可以简单地通过以下方式完成:
foreach(push_neutral!, values(a))
编辑2:专业版
neutral{K, V}(::Type{Dict{K, V}}) = Dict{K, V}()
似乎没有必要。
编辑3:A
NullableArray
可能是解决您问题的更好方法。然而,在当前版本中使用它仍然有点困难。