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

时间:2016-10-25 22:29:01

标签: arrays types julia

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

type p 
    c::Int
    p() = new(0)
end

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

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

显然我得到的错误就像" len未定义"我不知道如何解决它。此外,我应该如何定义pp类型的构造函数?我是朱莉娅的新手,我甚至不确定我所询问的内容是否真的可行。

1 个答案:

答案 0 :(得分:7)

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

julia> len = 3
       Array{p}(1, len)
1×3 Array{p,2}:
 #undef  #undef  #undef

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

type pp 
   len::Int
   arr::Array{p,2}
end
但是,这并不是你想要的。您可能只需要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))