Bug #20003
closedArray#rassoc does not preform implicit conversion
Description
There is a difference between behaviour of Array#assoc and Array#rassoc. The first one performs implicit conversion (calls #to_ary) while the former does not.
class ArrayConvertible
def initialize(*values)
@values = values;
end
def to_ary
@values
end
end
s1 = [1, 2]
s2 = ArrayConvertible.new(2, 3)
a = [s1, s2]
The a.assoc(2)
call returns [2, 3]
as expected. However, a.rassoc(3)
returns nil
Expected behaviour: a.rassoc(3)
returns [2, 3]
in such cases.
Updated by temabolshakov (Tema Bolshakov) about 1 year ago
temabolshakov (Tema Bolshakov) wrote:
There is a difference between behaviour of Array#assoc and Array#rassoc. The first one performs implicit conversion (calls #to_ary) while the former does not.
class ArrayConvertible def initialize(*values) @values = values; end def to_ary @values end end s1 = [1, 2] s2 = ArrayConvertible.new(2, 3) a = [s1, s2]
The
a.assoc(2)
call returns[2, 3]
as expected. However,a.rassoc(3)
returnsnil
Expected behaviour:
a.rassoc(3)
returns[2, 3]
in such cases.
I prepared a fix here https://github.com/ruby/ruby/pull/8904
Updated by mame (Yusuke Endoh) about 1 year ago
Thanks, I will merge it.
Updated by temabolshakov (Tema Bolshakov) about 1 year ago
- Status changed from Open to Closed
Applied in changeset git|e4a11a1283da07fd1d94535298c605caf299a834.
Array#rassoc should try to convert to array implicitly. Fixes #20003