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

问题描述 投票:0回答:1

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

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

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

ruby
1个回答
4
投票

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

类对象如何知道它已经或尚未被赋值给常量?

Ruby VM知道一切。

© www.soinside.com 2019 - 2024. All rights reserved.