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