From: "Eregon (Benoit Daloze) via ruby-core" Date: 2023-02-25T11:28:14+00:00 Subject: [ruby-core:112600] [Ruby master Feature#19450] Is there an official way to set a class name without setting a constant? 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 `#::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 # => # ``` 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/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/