类中的Ruby类(或模块中的模块)
在阅读不同的Ruby书籍时,我注意到Ruby类可以在其他Ruby类或模块中定义。 下面是一个类中的类的例子:
class Outerclass def foobar puts "FOOBAR" end class Innerclass def barfoo puts "BARFOO" end end end
以下是我在IRB中运行的一些代码,试图从概念上理解这一点:
oc = Outerclass.new # => #<Outerclass:0x00000100a46478> Outerclass.instance_methods(false) # => [:foobar] ic = Outerclass::Innerclass.new # => #<Outerclass::Innerclass:0x00000100a0b120> ic = Outerclass::Innerclass.instance_methods(false) # => [:barfoo]
这是我的问题:
-
当ruby解释器首次遇到我的类定义代码时,是否会通过我写的方法并将其存储在某个地方? 我知道实例方法“foobar”实际上并没有运行,因为在Outerclass定义中没有对它进行调用。
-
捎带第一个问题,当Ruby遇到类Innerclass时呢? 这里发生了什么?
-
一般来说,为什么你想要在课堂上有class级,有什么原因? 这样做有什么好处吗?
-
Outerclass的一个实例是否对类Innerclass有了解?
-
Innerclass的一个实例是否知道类Outerclass?
感谢您可以提供的任何帮助!
当解释器正在通过这个文件时,它是这样分配类的:
OuterClass = Class.new do def foobar puts "FOOBAR" end InnerClass = Class.new do def barfoo puts "BARFOO" end end end
所以当Ruby遇到嵌套的类时,它将它赋值给常量的指定给常量InnerClass
,它们之间没有任何关系。
InnerClass
没有inheritance到InnerClass
:
InnerClass.ancestors => [InnerClass, Object, Kernel, BasicObject]
当你调用OuterClass::InnerClass
常量时,你InnerClass
常量是在InnerClass
下的名称空间,它等于分配给它的Class.new语句。
阅读这本书的一本好书是“rubyMetaprogramming”。 它进入类,单身,模块等细节