From: matz@... Date: 2019-02-07T07:49:13+00:00 Subject: [ruby-core:91461] [Ruby trunk Feature#5632] Attempt to open included class shades it instead. Issue #5632 has been updated by matz (Yukihiro Matsumoto). Status changed from Assigned to Closed After 7 years of consideration, I reject this issue. In the example in the original, the first `X` class is defined as `A::X` and the second definition (override attempt) was done in `B::X`. Since they are different, we define different classes. Case closed. Matz. ---------------------------------------- Feature #5632: Attempt to open included class shades it instead. https://bugs.ruby-lang.org/issues/5632#change-76722 * Author: Anonymous * Status: Closed * Priority: Normal * Assignee: mame (Yusuke Endoh) * Target version: Next Major ---------------------------------------- ``` # 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'. ``` -- https://bugs.ruby-lang.org/ Unsubscribe: