将类对象与变量相关联会更改类对象

时间:2018-03-05 10:39:21

标签: ruby

请解释如何发生这种情况:

a = Class.new(StandardError).new
# => #<#<Class:0x007fa3af1d24a0>: #<Class:0x007fa3af1d24a0>>
a.class.name
# => nil
AError = a.class
# => AError
a.class.name
# => "AError"

是否将类对象赋值作为语言/ vm中的特殊情况处理?类对象如何知道它已经或尚未分配给常量?

1 个答案:

答案 0 :(得分:4)

是的,这是预期的行为/特殊情况。当您使用Class.new创建一个类时,它最初没有名称。它复制了它分配给的第一个常量的名称。

  

类对象如何知道它已经或尚未分配给常量?

Ruby VM知道一切。