Issue #19742 has been updated by ioquatix (Samuel Williams).
Just because `name == nil` implies it's anonymous, does not mean that anonymous
implies that `name == nil`. In fact, we don't have any `anonymous?` implementation yet
to define this behaviour. I don't know if the documentation clarifies this or not, but
I don't recall seeing it clearly outlined anywhere. If anything, I think this issue is
a good place to figure out what we want, and then add clear and canonical documentation
(as well as specs).
Until my previous PR `set_temporary_name`, which includes a discussion of `permanent`, I
don't think there was any user facing documentation, but the implementation is clear
on the behaviour. I'd be okay with changing this documentation if we want to clarify
some aspects of it (we still have until Ruby 3.3 release which is months away).
----------------------------------------
Feature #19742: Introduce `Module#anonymous?`
https://bugs.ruby-lang.org/issues/19742#change-103641
* 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/