From: "ioquatix (Samuel Williams) via ruby-core" Date: 2023-02-25T11:34:31+00:00 Subject: [ruby-core:112601] [Ruby master Feature#19450] Is there an official way to set a class name without setting a constant? Issue #19450 has been updated by ioquatix (Samuel Williams). > 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. It's already the case that `Module#name` can return a string which is not how you access that module (or class). Rails already does that for ActiveRecord models. Anyone can override that method, so I don't see how that's relevant. Also, the proposed implementation does not change the behaviour of permanent names, so it does not break non-anonymous classes. ```ruby x = Class.new(Object, "foo") x.name # => "foo" X = x x.name # => "X" ``` > Then the names already look like #::C, no? That's good enough IMO and a good representation of what is being done. I basically disagree with this. `Object.const_set` to assign a name to what should otherwise be anonymous modules, is a hack. The proposed PR provides a mechanism to give anonymous modules and classes a name, and there are literally hundreds of examples of people trying to achieve 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-102048 * 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/