
Issue #19450 has been updated by ioquatix (Samuel Williams). I wondered about whether your point of class name consistent was valid, but I found cases like this: ``` irb(main):005:0> k = Class.new => #<Class:0x000000010488b9b8> irb(main):006:0> K = k => K irb(main):007:0> k.name => "K" irb(main):008:0> Object.send(:remove_const, :K) => K irb(main):009:0> k.name => "K" irb(main):010:0> j = Class.new => #<Class:0x000000010488c318> irb(main):011:0> K = j => K irb(main):012:0> K.name => "K" irb(main):013:0> k.name => "K" irb(main):014:0> j.name => "K" ``` So, it's not possible that the class path is actually logical... and the same applies to nested classes. ``` irb(main):015:1* class k::J irb(main):016:0> end => nil irb(main):017:0> k::J => K::J irb(main):018:0> k.name => "K" irb(main):019:0> k == K => false irb(main):020:0> K::J (irb):20:in `<main>': uninitialized constant K::J (NameError) from <internal:kernel>:187:in `loop' from -e:1:in `<main>' ``` ---------------------------------------- Feature #19450: Is there an official way to set a class name without setting a constant? https://bugs.ruby-lang.org/issues/19450#change-102051 * 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/