我想制作一个包含字典作为其命名字段之一的复合类型。但显而易见的语法并不奏效。我确信有一些基本的东西我不明白。这是一个例子:
type myType
x::Dict()
end
Julia说:type: myType: in type definition, expected Type{T<:Top}, got Dict{Any,Any}
这意味着,我猜测,字典不是Any
的字典,因为任何命名字段都必须如此。但我不确定如何说出我的意思。
我需要一个名为字典的字段。内部构造函数将初始化字典。
答案 0 :(得分:8)
types 和 instances 之间的语法有细微差别。 Dict()
实例化字典,而Dict
本身就是类型。定义复合类型时,字段定义必须采用symbol::Type
。
该错误消息有点令人困惑。它实际上是这样说的:
在类型定义中,期望类型为
Type{T<:Top}
的内容,是Dict{Any,Any}
类型的实例。换句话说,它预期类似于
Dict
,Type{Dict}
,而是获得Dict()
,这是Dict{Any,Any}
。
您想要的语法是x::Dict
。
答案 1 :(得分:5)
Dict()
创建一个字典,特别是Dict{Any,Any}
(即键和值可以是任何类型,<:Any
)。您希望该字段为类型 Dict
,即
type myType
x::Dict
end
如果你知道键和值类型,你甚至可以写,例如
type myType
x::Dict{Int,Float64}
end