2016-10-15 92 views
0

我已经创建了自己的类型:访问二维数组

type T 
    name 
    pos 
end 

我想要做的就是创建这种类型的二维数组。这就是我做的:

arr = Array{T}(10,10) #create 2d Array 

这创建了2d数组(10乘10),所有元素都是未定义的。 (IM想我的问题是在这里)

所以,当我尝试了数组的一个元素改变

arr[1,1].name = "Hi" 

我得到这个错误: ERROR:UndefRefError:访问未定义的参考

什么我试图解决这个问题的方法是创建一个T的默认实例并遍历数组,并将每个元素设置为默认值。

default = T("Hi",1) 
for i = 1:10 
    for j = 1:10 
    arr[i,j] = default 
    end 
end 

现在,这将数组默认值中的每个元素成功地,但现在的问题是,如果我试图改变只是一个数组的元素的值,数组的每一个元素变为那个价值。

arr[2,4].name ="Hello" 

在该行之后,所有元素的值都是“Hello”。

这不是你应该如何改变数组中的值吗?当我在Int64二维数组上做同样的工作时,我所期望的一切都是如此。

+0

下面是它的外观截图:http://imgur.com/FUE4eab – CVasquezG

回答

4

一切正常,因为它应该。

arr[i,j] = default 

arr[i,j]到参考default这是T("Hi",1)实例。所以每一个arr[i,j]都是指同一个类型的实例。

arr[1,1].name = "Hi" 

,因为当你做你arr = Array{T}(10,10)创建的控股T S上的能力的10×10空数组是不行的,但你还没有把任何T在里面!

因此,你想要做的是:

arr[i,j] = T("Hi",1) 

这都将做出T,使a[i,j]参考。由于每条线都在制作新的T,因此它们将引用不同的实例并分别进行操作。

+0

真棒!感谢您的好解释和快速回答。 – CVasquezG

+0

如果你喜欢这个答案,不要忘了点击复选标记接受答案,以便将来的用户知道这个答案。欢迎来到SO社区! –