2016-10-31 5 views
0

У меня есть массив, названный a и определяющий его с помощью [1, 2, 3].Как использовать рекурсивный массив

Далее, я толкнул его к себе:

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

и результат я получаю:

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

Когда я хочу, чтобы получить последний элемент array с помощью a.last я получаю:

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

Что происходит, когда мы будем массировать массив?

Да, я понимаю, что это должно создать рекурсивный массив, но что мы можем с ним сделать?

+5

* «что мы с этим можем сделать» * - сделайте кофе, если вы наберете достаточно '.last' и сделаете процессор достаточным количеством тепла ...? Я не уверен, какой ответ вы ожидаете здесь ... – 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] в качестве последнего элемента массива. В том, как вы это делали, вы помещаете ссылку в конец массива, и это становится рекурсивным.

Смежные вопросы