2016-10-15 91 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社區! –