Julia中的复合类型:字典作为命名字段?

5
我想创建一个复合类型,其中包含一个字典作为其命名字段之一。但是,显然的语法无法正常工作。我确定有些基本知识我不理解。以下是一个示例:
type myType
    x::Dict()
end

Julia说:type: myType: 在类型定义中,期望得到 Type{T<:Top},但是得到了 Dict{Any,Any} 这意味着,我猜想是因为一个字典不是像任何已命名的字段一样的 Any 类型。但我不知道如何告诉它我的意思。

我需要一个命名字段,它是一个字典。一个内部构造函数将初始化该字典。

2个回答

9
在类型和实例之间的语法上有微妙的差异。 Dict() 实例化字典,而 Dict 本身是类型。在定义复合类型时,字段定义需要采用 symbol :: Type 格式。
那个错误消息有点令人困惑。它的实际意思是:
在类型定义中,期望 Type{T<:Top} 类型的某些东西,得到了 Dict{Any,Any} 类型的实例。
换句话说,它期望像 Dict 这样的 Type {Dict} ,但却得到了 Dict(),它是 Dict{Any, Any}
您需要的语法是 x :: Dict

5

Dict()创建一个字典,具体来说是一个Dict{Any,Any}(即键和值可以是任何类型的,<:Any)。你希望该字段为Dict类型,即

type myType
    x::Dict
end

如果您知道键和值的类型,甚至可以编写如下代码:

如果您知道键和值的类型,甚至可以编写,例如:

type myType
    x::Dict{Int,Float64}
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接