Ruby支持递归数组(即包含自身的数组):
a = []
# => []
a << a
# => [[...]]
a.first == a
# => true
这本质上很酷,但你可以用它做什么工作呢?
nodes = { a:[], b:[], c:[], d:[] }
nodes[:a] << nodes[:a]
nodes[:a] << nodes[:b]
nodes[:b] << nodes[:a]
nodes[:b] << nodes[:c]
p nodes
#=> {:a=>[[[...], []], [...]], :b=>[[[...], [...]], []], :c=>[], :d=>[]}
a = []; a << a; b = []; b << b; a == b # => true
- Marc-André Lafortune
a.first
和a
是完全相同的对象(具有相同的object_id
)。Ruby 同样支持独立递归结构的比较(例如b = []; b << b; a == b # => true
)。 - Marc-André Lafortune