Julia的复合类型中的参数数组长度

时间:2016-12-15 11:19:06

标签: julia

我正在使用Julia的StrPack模块从文件中读取二进制数据。

要阅读100个值的列表,请使用以下struct

@struct type MyType
    values::Array{Float64}[100]
end

它工作正常。

但是,我想知道是否有一种参数化数组长度的方法。 Julia的参数类型允许您仅更改内部类型(即,在上面的示例中,我可以将Float64替换为其他类型)。

我也试过这个:

length=100
@struct type MyType
    values::Array{Float64}[length]
end

给出了这个错误:

ERROR: TypeError: Test: in type definition, expected Type{T}, got Array{Float64,1}

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您的问题仅针对StrPack。在Julia中,数组的类型仅限于元素类型及其排名。 (Rank是它具有多少索引的计数。)StrPack包使用@struct宏在[number]声明后查找Array,并手动创建Julia中适当的bits类型。您尝试做的事情是这样的:

@struct type MyType{n}
    values::Array{Float64}[n]
end

不幸的是,StrPack的{​​{1}}宏根本不支持类型参数,并且它会在@struct上阻塞,因为它无法正确命名类型。