Issue #19742 has been updated by fxn (Xavier Noria).
Same. The name is called "permanent" because it does not change, the predicate
above would be `reachable_through_its_name?`.
But then, the Ruby language does no have any expectation about the name of classes and
modules. If there was some, it would be present and enforced by the language.
The name is an attribute of class and module objects, a string, and that is pretty much
it. To me, `X = Module.new` and `Y = String.new` are essentially the same. It is true that
the first one has a side-effect, but other than that this is storage and objects, and
those are orthogonal.
You don't even have "namespaces", a module does not have a namespace. A
module is an object and can be stored in 7 constants and 4 variables. In Ruby, class and
module objects have constants and that is all. It's a pretty weak model in that sense
(meaning, you cannot derive much from it).
----------------------------------------
Feature #19742: Introduce `Module#anonymous?`
https://bugs.ruby-lang.org/issues/19742#change-106286
* Author: ioquatix (Samuel Williams)
* Status: Open
* Priority: Normal
----------------------------------------
As a follow-on <from
https://bugs.ruby-lang.org/issues/19521>gt;, I'd like propose
we introduce `Module#anonymous?`.
In some situations, like logging/formatting, serialisation/deserialization, debugging or
meta-programming, we might like to know if a class is a proper constant or not.
However, this brings about some other issues which might need to be discussed.
After assigning a constant, then removing it, the internal state of Ruby still believes
that the class name is permanent, even thought it's no longer true.
e.g.
```
m = Module.new
m.anonymous? # true
M = m
m.anonyomous # false
Object.send(:remove_const, :M)
M # uninitialized constant M (NameError)
m.anonymous? # false
```
Because RCLASS data structure is not updated after the constant is removed, internally the
state still has a "permanent class name".
I want to use this proposal to discuss this issue and whether there is anything we should
do about such behaviour (or even if it's desirable).
Proposed PR:
https://github.com/ruby/ruby/pull/7966
cc @fxn
--
https://bugs.ruby-lang.org/