
Issue #19450 has been updated by Eregon (Benoit Daloze).
I'm also pretty sure assigning to a constant is incompatible with Ractor in some cases..
No, modules and classes are always shared between Ractors. Assigning to a constant needs to be in the main Ractor but so does loading any code anyway.
My web framework utopia loads controllers into anonymous modules and classes (for live reloading they are not assigned globally) and I want to give them better names.
I suppose they share the outer module then? Then the names already look like `#<Module:0x00007f416ffb7950>::C`, no? That's good enough IMO and a good representation of what is being done. --- The fundamental thing here is `Module#name` must return a String which is how to access that module, unless some part is anonymous and then of course it cannot be accessed via a constant path. This feature would break that, and I think no feature is worth breaking that. ---------------------------------------- Feature #19450: Is there an official way to set a class name without setting a constant? https://bugs.ruby-lang.org/issues/19450#change-102047 * Author: ioquatix (Samuel Williams) * Status: Open * Priority: Normal ---------------------------------------- This is the best I could come up with: ```ruby klass = Class.new Object.const_set("Klass", klass) Object.send(:remove_const, "Klass") puts klass.new # => #<Klass:0x0000000100a9d688> ``` Can we do better? What about something like: ```ruby Class.new(name: "Klass") ``` or ```ruby Class.new do def self.name "Klass" end end ``` etc -- https://bugs.ruby-lang.org/