2016-12-15 45 views
2

我使用Julia的StrPack模块从文件中读取二进制数据。Julia复合类型中的参数数组长度

要阅读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} 

任何想法?

+0

此时,数组维度被参数化,但数组长度不是。围绕固定大小数组的特殊数组类型进行了一些讨论,但AFAIK没有人加紧完成任务。讨论从这里开始(https://github.com/JuliaLang/julia/issues/5857) –

回答

2

您的问题是特定于StrPack。在Julia中,数组的类型仅限于元素类型及其级别。 (Rank是它有多少个索引的计数。)StrPack包使用@struct宏在Array声明后查找[number],并且它在Julia中为它手动创建适当的bits类型。你是试图做的是这样的:

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

不幸的是,StrPack@struct宏根本不支持类型的参数,它会窒息MyType{n},因为它不会正确地命名类型。