我已经创建了自己的字体:
type T
name
pos
end
我想做的是创建一个这种类型的2d数组。我是这样做的:
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
现在,这成功地将数组中的每个元素设置为默认值,但现在的问题是,如果我试图改变数组中一个元素的值,数组中的每个元素都将更改为该值。
arr[2,4].name ="Hello"
该行之后所有元素的值都是"Hello"
这不是你应该如何改变数组中的值吗?当我在Int64 2d数组上做同样的事情时,一切都按照我的期望工作。
一切正常
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
s放在那里!
因此你要做的是:
arr[i,j] = T("Hi",1)
将使T
和a[i,j]
都引用它。由于每一行都创建一个新的T
,它们将引用不同的实例并单独操作。