У нас нет указателей (по крайней мере, на уровне Ruby), но у нас есть ссылки. Таким образом, вы могли бы использовать реальный ха sh вместо вашей строки "stub"
:
tree = {}
tree[0] = {}
tree[0][1] = {}
, затем поставить sh эту ссылку в leaf
:
leaf = tree[0][1]
и изменить содержимое leaf
без назначения ничего нового для leaf
:
leaf[0] = %w[a b c]
Это оставит вас с tree[0][1]
, равным {0 => ['a', 'b', 'c']}
по желанию. Конечно, если вы скажете leaf = {0 => %w[a b c]}
, тогда у вас будет новая ссылка, и вы разорвите соединение с tree[0][1]
.
Обычно это идет в другом направлении. Когда вам нужен новый лист, вы создаете его:
leaf = {0 => %w[a b c]}
и затем помещаете этот лист в дерево:
tree[0][1] = leaf
tree[0][6] = leaf # Possibly in multiple places
Тогда вы можете сказать leaf[11] = %w[x y z]
и tree[0][1][11]
и tree[0][6][11]
также будет ['x', 'y', 'z']
, потому что leaf
, tree[0][1]
и tree[0][6]
будут относиться к одному и тому же базовому ха sh.