2016-09-13 59 views
2

如何在数据类型内声明具有固定大小的数组字段? 我正在创建一个名为CPU的复合数据类型。我知道你可以将字段的类型设置为数组类型,但是你可以实例化大小,还是需要创建一个显式构造函数?具有数组字段的复合数据类型

type CPU 
     //how do I declare memory as an Int8 array of size 64K 
//memory::Array{Int8,1} 
//memory = Array{Int8,64000}? 
    OpCode::Int8 
    Operand::Int8 
    Condition::Int8 
    PC::Int64 
end 
+1

我会建议在此问一个单独的问题。在我看来,克里斯已经做得很好,回答了你提出的第一个问题。这一修订现在有很大不同。如果这两个问题是分开的,对于未来的网站用户会更有用,如果问题不成为移动目标,那么回答问题的人也会更好。 –

+2

嗨@JJTO,欢迎来到Stack Overflow!我将你的问题回复到你的第一次修订。请单独提出新问题,因为这对于有类似问题的其他用户会更有帮助。 –

+0

通过点击问题底部的“编辑过的时间量前”链接,您可以检索您在修订中编写的内容(用于将其移至新问题的目的)。点击“并排”链接,查看凤阳回滚前的帖子全文。 –

回答

6

数组类型没有大小参数。内存类型为Vector{Int8}(或Array{Int8,1},Vector只是一维数组的别名)。您可以使用内部构造函数来检查大小或抛出错误。

为了更安全,你可以创建一个新的类型,其只是一个数组,并定义为调度lengthgetindex等,使一个阵列接口将其持有的阵列,但没有定义方法调整。这可能是矫枉过正的(如果你抓住数组的字段,你仍然可以调整它的大小)。

由于数组太大(它们会增加很多编译时间),因此在此处不适用FixedSizeArrays或StaticArrays。

+0

是的,我使用了一个像你所建议的内部构造函数,它的工作原理。谢谢您的帮助。但我仍然无法理解你在第二段中的含义......你是说我为长度作为参数之一的数组类型创建一个新的构造函数?但我认为你不能在类型中实例化一个固定大小的数组?对不起,我仍然用C/C++来思考,你可以很容易地用一个任意长度的数组创建一个结构体,所以我无法理解为什么在Julia中你不能这样做。 – JJTO

+0

如果你使用'Array {Int8,1}'作为一个字段,那么它是一个具有任意长度数组的类型,所以我不明白你的意思。我在第二段中说的是,如果你不喜欢数组有一个'resize!'函数,那么你可以定义一个不可变类型,其中一个字段是一个数组,并且定义这个新数组的行为自己定义所有的数组函数(即使'length'计算数组的唯一字段的长度等)。这个新的数组类型不会有任何开销,但这是过度的损失 –

+0

如果你的意思是你想要声明内存和类型,请注意数组的字段包含一个指向数组的指针,而不是数组本身。你不想为类型中的数组声明内存,因为为了定义类型,你将不得不定义数组,所以有两个定义会让你做一个额外的副本(所以对于键入以指向同一片内存)。这是你问的吗? –