Ruby 刚看到有贴说 class A 和 module A::B 的疑问

yxmmrwx · 2025年01月18日 · 最后由 yxmmrwx 回复于 2025年01月18日 · 78 次阅读

class A end

module A::B end

从测试效果来看 A 是类 A::B 是模块,这里的 A::B 是一个完整的名字,不能把 A::B 分解成 A 和 B 来看,应该是为了方面名字叫空间的管理的识别用, 跟 C++ module A.B.C 的用意一样

所以 class A 和 module A::B 没有任何关系?

是我搞错了。定义了一个类 A,这个 A 它既是一个 Class 也是一个 Module,不矛盾,因为 Class 的 superclass 是 Module。

又再测试一下,发现前面讲的 A::B 是一个完整的名字,是错的,因为能访问到单独的 B, p A.ancestors #=>[A, Object, Kernel, BasicObject] p A::B.ancestors #=>[A::B] p A.constants[0] #=>:B p A.constants[0].class #=>Symbol 能看到的 A 既是类也是模块,再深入看到上面的结果又迷糊了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号