Bug #2346
closedArray(nil) fails after redefining NilClass.method_missing to throw NoMethodError
Description
=begin
Given the following script:
print "Array(nil) => ", Array(nil).inspect, "\n"
print "Array.try_convert(nil) => ", Array.try_convert(nil).inspect, "\n"
class NilClass
private
def method_missing(method, *args, &block)
raise NoMethodError
end
end
print "Array(nil) => ", Array(nil).inspect, "\n"
print "Array.try_convert(nil) => ", Array.try_convert(nil).inspect, "\n"
Ruby 1.9.2dev returns this:
$ ruby -v
ruby 1.9.2dev (2009-11-08 trunk 25690) [i386-mswin32_90]
$ ruby nil_ary.rb
Array(nil) => []
Array.try_convert(nil) => nil
nil_ary.rb:6:in method_missing': NoMethodError (NoMethodError) from nil_ary.rb:9:in Array'
from nil_ary.rb:9:in `'
while for Ruby 1.8.8dev it is ok:
$ ruby -v
ruby 1.8.8dev (2009-10-31 revision 25583) [i386-mswin32_90]
$ ruby nil_ary.rb
Array(nil) => []
Array.try_convert(nil) => nil
Array(nil) => []
Array.try_convert(nil) => nil
Ruby 1.9.1-p0 (Windows) also runs fine. I don't understand what is happening here, but the behavior change breaks Rails 2.3.4 because active_support/whiny_nil.rb redefines NilClass.method_missing with code equivalent to the above one.
=end