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



我已经创建了自己的字体:

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)

将使Ta[i,j]都引用它。由于每一行都创建一个新的T,它们将引用不同的实例并单独操作。

相关内容

  • 没有找到相关文章

最新更新