2016-10-31 48 views
0

我有一個名爲a的數組,並使用[1, 2, 3]來定義它。如何使用遞歸數組

接下來,我把它推到自己:

a = [1, 2, 3] 
a << a 

,結果我得到的是:

#=> [1, 2, 3, [...]] 

當我想用a.last得到的array最後一個元素,我得到:

a.last 
#=> [1, 2, 3, [...]] 
#even 
a.last.last.last 
#=> [1, 2, 3, [...]] 

這是怎麼回事,什麼時候我們要將數組推到自己?

是的,我知道這應該創建一個遞歸數組,但我們可以用它做什麼?

+5

*「我們可以用它做什麼」* - 如果您輸入足夠多的'.last'使CPU產生足夠的熱量,就可以製作咖啡...?我不知道你期望在這裏得到什麼樣的答案... – deceze

+0

我不知道紅寶石處理它這個好:) –

+1

@deceze我的意思是,也許有人知道如何在實際工作中使用'遞歸陣列'例子 –

回答

2

在Ruby變量中,數組元素等是對象引用。所以當你做a = [1, 2, 3]時,內存中會有一個數組,並且a變量是對該內存的引用。現在,當你做a << a時,a[4]也將是對該對象的引用。因此實際上a現在包含對其自身的引用。

1
a = [1, 2, 3] 
a << a.dup 
a.last 
=> [1, 2, 3] 
a.last.last 
=> 3 

也許這就是你想要的。這只是插入一個數組[1, 2, 3]作爲數組的最後一項。按照你的方式,你在數組的末尾放置了一個引用,並且這個引用是遞歸的。