From: "Eregon (Benoit Daloze) via ruby-core" Date: 2023-02-25T11:22:07+00:00 Subject: [ruby-core:112599] [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). ioquatix (Samuel Williams) wrote in #note-13: > An example of this is web frameworks which load files into anonymous modules, those modules can be named by path or mounted location in the web application. Which web framework? Who wants `model/user.rb::User` instead of `User`/`MyApp::User`? Nobody I suspect. Also this just wouldn't work if any class needs to refer to another class, they need to be in the same namespace anyway. You could name the outer module, that would make a lot more sense and be usable to refer to the class from Ruby code. I think it's just a bad idea to use anonymous modules/classes for important functionality. I think anonymous modules/classes are basically only good for tests/mocks or quick hacks. > Whether or not you agree with it, it's already happening in a lot of places, e.g. overriding `Class#name` is fairly common, but doesn't cover all the cases unfortunately due to the internal design/cache of class names. Where? I don't count labeled_{class,module}, as there is no need for that in ruby/spec. I think some test framework used to/does something like that, but it seems generally accepted as a mistake. ---------------------------------------- Feature #19450: Is there an official way to set a class name without setting a constant? https://bugs.ruby-lang.org/issues/19450#change-102046 * 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/