请解释一下如何发生这种情况:
a = Class.new(StandardError).new
# => #<#<Class:0x007fa3af1d24a0>: #<Class:0x007fa3af1d24a0>>
a.class.name
# => nil
AError = a.class
# => AError
a.class.name
# => "AError"
类对象赋值是作为语言/ vm中的特殊情况处理的吗?类对象如何知道它已经或尚未被赋值给常量?
是的,这是预期的行为/特殊情况。使用Class.new
创建类时,它最初没有名称。它复制了它分配给的第一个常量的名称。
类对象如何知道它已经或尚未被赋值给常量?
Ruby VM知道一切。