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

Posted

技术标签:

【中文标题】Julia 中的复合类型:作为命名字段的字典?【英文标题】:Composite types in Julia: Dictionaries as a named field? 【发布时间】:2015-05-27 15:06:19 【问题描述】:

我想创建一个复合类型,其中包含一个字典作为其命名字段之一。但是明显的语法不起作用。我敢肯定有一些基本的东西我不明白。这是一个例子:

type myType
    x::Dict()
end

Julia 说:type: myType: in type definition, expected TypeT<:Top, got DictAny,Any 这意味着,我猜,字典不是 Any 的一个,因为任何命名字段都必须如此。但我不知道如何表达我的意思。

我需要一个作为字典的命名字段。内部构造函数将初始化字典。

【问题讨论】:

【参考方案1】:

typesinstances 之间的语法存在细微差别。 Dict() 实例化一个字典,而 Dict 本身就是类型。定义复合类型时,字段定义的格式必须为symbol::Type

该错误消息有点令人困惑。它实际上是这样说的:

在类型定义中,期望具有该类型的东西 TypeT<:Top,得到类型的实例 DictAny,Any

换句话说,它期望像Dict,这是一个TypeDict,但却得到了Dict(),这是一个DictAny,Any

你想要的语法是x::Dict

【讨论】:

【参考方案2】:

Dict() 创建一个字典,特别是 DictAny,Any(即键和值可以有任何类型,<:Any)。您希望该字段为 type Dict,即

type myType
    x::Dict
end

如果你知道键和值类型,你甚至可以写,例如

type myType
    x::DictInt,Float64
end

【讨论】:

以上是关于Julia 中的复合类型:作为命名字段的字典?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Julia 对象的字段

复合数据类型

复合数组类型作为 PostgreSQL 中的 OUTPUT 参数

复合数据类型,英文词频统计

复合数据类型,英文词频统计

julia系列3:函数模块与宏