Arrays 朱莉娅:类型定义包含可变长度数组

Arrays 朱莉娅:类型定义包含可变长度数组,arrays,types,julia,Arrays,Types,Julia,我想在Julia中定义一个复合类型,它包含另一个复合类型的可变长度数组。最好用一个例子来解释。假设我有这个类型 type p c::Int p() = new(0) end 我真的不在乎。问题是当我试图定义类型时 type pp len::Int arr::Array{p}(1, len) end 很明显,我遇到了一个错误,比如“lennotdefined”,我不知道如何修复它。此外,我应该如何定义pp类型的构造函数?我是朱莉娅的新手,我甚至不确定我所问的是否

我想在Julia中定义一个复合类型,它包含另一个复合类型的可变长度数组。最好用一个例子来解释。假设我有这个类型

type p 
    c::Int
    p() = new(0)
end
我真的不在乎。问题是当我试图定义类型时

type pp 
   len::Int
   arr::Array{p}(1, len)
end

很明显,我遇到了一个错误,比如“lennotdefined”,我不知道如何修复它。此外,我应该如何定义
pp
类型的构造函数?我是朱莉娅的新手,我甚至不确定我所问的是否真的可能。

右侧的东西需要是类型。表达式
数组{p}(1,len)
不是一个类型;它实际上创建了一个数组:

它是未初始化的,但您可以看到它本身是一个数组(而不是数组的类型)。它的类型只是
数组{p,2}
。因此,对于您的示例,最简单的修复方法是:

type pp 
   len::Int
   arr::Array{p,2}
end
但这不是你真正想要的。您可能只需要
p
的向量(而不是
数组{p}(1,len)
将创建的行矩阵)。还请注意,Julia的阵列功能非常全面。你不需要自己记录长度;阵列已经做到了这一点

所以我可能会写一个
PP
类型如下:

immutable PP
    arr::Vector{p} # Vector{p} is an alias for Array{p, 1}
end
PP(len::Int) = PP(Vector{p}(len))
您还可以使用以确保
arr
的长度
len
immutable PP
    arr::Vector{p} # Vector{p} is an alias for Array{p, 1}
end
PP(len::Int) = PP(Vector{p}(len))