我想在Julia中定义一个复合类型,它包含另一个复合类型的可变长度数组。通过一个例子可以更好地解释。我们说我有类型
type p
c::Int
p() = new(0)
end
我真的不在乎。问题是当我尝试定义类型
时type pp
len::Int
arr::Array{p}(1, len)
end
显然我得到的错误就像" len未定义"我不知道如何解决它。此外,我应该如何定义pp
类型的构造函数?我是朱莉娅的新手,我甚至不确定我所询问的内容是否真的可行。
答案 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))