[#91458] [Ruby trunk Feature#4475] default variable name for parameter — matz@...
Issue #4475 has been updated by matz (Yukihiro Matsumoto).
3 messages
2019/02/07
[ruby-core:91461] [Ruby trunk Feature#5632] Attempt to open included class shades it instead.
From:
matz@...
Date:
2019-02-07 07:49:13 UTC
List:
ruby-core #91461
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>