访问我自己类型的julia中的2d数组

时间:2016-10-15 19:54:27

标签: arrays multidimensional-array 2d julia

我创建了自己的类型:

type T
   name
   pos
end

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

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

这将创建2d数组(10乘10),其中所有元素都未定义。 (我认为我的问题在这里)

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

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

我收到此错误: 错误:UndefRefError:访问未定义的引用

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

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

现在,这会成功地将数组中的每个元素设置为默认值,但现在的问题是,如果我尝试更改数组中只有一个元素的值,则数组的每个元素都会更改为该值。 / p>

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

在该行之后,所有元素的值都为" Hello"。

这不是你应该如何改变数组中的值吗?当我在Int64 2d阵列上做同样的事情时,一切都会如我所料。

1 个答案:

答案 0 :(得分: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)时,你创建了一个10x10空数组,可以保留T s,但你还没有把T放在那里!

因此,您想要做的是:

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

这将使T和make a[i,j]引用它。由于每一行都是新的T,因此它们将引用不同的实例并单独行动。