You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby匿名类创建疑问:大写C对应的类是否属于匿名类

结论

你的判断完全正确,匿名类的本质是「没有绑定大写常量的类对象」,这和《The Well-Grounded Rubyist》中的相关表述完全一致。

具体说明
  • 调用Class.new创建类时,如果仅赋值给小写开头的局部变量(比如示例中的c),类对象没有对应的公开常量名称,就属于匿名类,在irb中输出时只会显示内存地址,格式为#<Class:0x...>,和你给出的第一个示例的输出完全吻合。
  • 当你把同一个类对象赋值给大写开头的常量(比如示例中的C)时,Ruby会自动将常量名设置为该类的官方名称,此时这个类就不再是匿名类了,输出类本身、类的实例时都会直接显示常量名C而非内存地址。

你可以用下面的代码验证这个逻辑:

# 仅赋值给局部变量,为匿名类
c = Class.new
p c # 输出类似 #<Class:0x0000000106b87d90> 的内容

# 赋值给大写常量后自动获得名称,不再是匿名类
C = c
p c # 输出 C
p C.new.class # 输出 C

《The Well-Grounded Rubyist》原文相关表述:类的名称本质上就是绑定到该类对象的大写常量名,只有没有绑定任何大写常量的类才属于匿名类。

内容的提问来源于stack exchange,提问作者Eric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:15:03