julia:类型定义包含可变长度数组

pip*_*ips 1 arrays types julia

我想在Julia中定义一个复合类型,它包含另一个复合类型的可变长度数组.通过一个例子可以更好地解释.假设我有类型

type p 
    c::Int
    p() = new(0)
end
Run Code Online (Sandbox Code Playgroud)

我真的不在乎.问题是当我尝试定义类型时

type pp 
   len::Int
   arr::Array{p}(1, len)
end
Run Code Online (Sandbox Code Playgroud)

显然我得到一个像"len not defined"这样的错误,我不知道如何修复它.而且,我应该如何定义类型的构造函数pp?我是朱莉娅的新手,我甚至不确定我问的问题是否真的可行.

Mat*_* B. 7

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

julia> len = 3
       Array{p}(1, len)
1×3 Array{p,2}:
 #undef  #undef  #undef
Run Code Online (Sandbox Code Playgroud)

它是未初始化的,但你可以看到它本身就是一个数组(而不是数组的类型).它的类型很简单Array{p,2}.所以对你的例子的最小修复就是:

type pp 
   len::Int
   arr::Array{p,2}
end
Run Code Online (Sandbox Code Playgroud)

但这并不是你想要的.你可能只需要一个向量p(而不是一个行矩阵,这是Array{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))
Run Code Online (Sandbox Code Playgroud)