Feature #5632
Updated by mame (Yusuke Endoh) almost 6 years ago
``` # Hello everyone. I'm not a very advanced ruby user, and I # would like to provide and outsider report on certain ruby # behavior that might surprise newbies. module A class X def hello; puts 'hello' end end end module B include A end B::X.new.hello => hello # As expected. # But when I tried to add new functionality to X, ... module B class X def goodbye; puts 'goodbye' end end end B::X.new.hello => NoMethodError # I was surprised, that my .hello method disappeared, # when all I was trying to do, was to improve X in B. # I actually somehow expected to work on a subclass # of X, like this: module C include A class X < X def goodbye; puts 'goodbye' end end end # My suggestions are: # 1. I consider 'class X < X' syntax a little bit # mysterious. How about making this a default # behavior for 'class X' statements? # 2. If the above is not considered beneficial, I # would welcome if 'class X' statement warned # when shadowing an existing name. People might # often assume that they are opening an existing # class, rather than getting a brand new one # shadowing the previous one. If people really # want a brand new shadowing class without warning # they could use explicit 'X = Class.new'. ```