This project is closed and read-only.
Misc #3401
closedarrays containing them selves do not apply == sensibly.
Description
=begin
a = [:a]
a << a
puts a
=> [:a [...]]
b = [:a]
b << b
puts b
=> [:a [...]]
#so , a == b?
puts a == b
=> false
#but they have the same structure...
puts a.to_yaml == b.to_yaml
=> true
#it looks like == compares the object_id's of arrays within arrays.
#more evidence:
c = [:a]
c << a
puts c
=> [:a, [:a, [...]]]
#clearly, a distinctly different array.
puts a == c
=> true
puts a.to_yaml == c.to_yaml
=> false
#this seems surprising behaviour to me
=end
Updated by ujihisa (Tatsuhiro Ujihisa) over 16 years ago
Updated by marcandre (Marc-Andre Lafortune) over 16 years ago
- Status changed from Open to Rejected
=begin
Ruby 1.9's treatment of recursive structures has been set so that two structures are equal if they contain the elements that are equal, or said otherwise if no difference can be found between them. If you can give a "path" x, y, z..., such that a[x][y][z] != b[x][y][z], then and only then will a != b.
In your example, c[0] == a[0], c[1] == a[1] and c.size == a.size, so c == a.
=end