我创建了自己的类型:
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阵列上做同样的事情时,一切都会如我所料。
答案 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
,因此它们将引用不同的实例并单独行动。