在 Ruby 中,使用 class 定义类时,实际上是在运行代码,这与 java 之类的静态语言有很大的差别。
另外,类只是一个增强的模块,因此,任何适用于类的东西也适用于模块。
result # => MyClass
* 注2:Ruby中总是存在一个当前对象self,与此类似,也总是存在一个当前类 (或模块)。每当通过class关键字来打开一个类时,这个类就成为当前类, 但是使用class关键字需要一个类的名字。 如果只有一个类的引用,需要用class_eval()方法打开这个类。
* 注3:类实例变量仅仅是属于Class类对象的普通实例变量。它仅仅可以被类 本身所访问,而不能被类的实例或之类所访问。
* 注4:类方法的实质,它们只是一个类的单件方法。
* 注5: 在类定义中使用一个类方法。
* 注6: eigenclass是一个对象特有的隐藏类,它是单件方法存在的地方。Ruby中可以使用如下语法进入eigenclass的作用域。
``` ruby
class << an_object
# do something
end
注 7: 如果对象是 eigenclass,那么 Ruby 不是从它所在的类开始,而是从这个 eigenclass 类中开始查找方法,如图。
注 8: 一个对象的 eigenclass 的超类是这个对象的类,一个类的 eigenclass 的超类是这个类的超类的 eigenclass,如图。
注 9: 通过向类的 eigenclass 中混入模块来定义类方法。
注 10: 通过给一个对象的 eigenclass 混入模块来定义单件方法。
注 11: 1. 给方法定义一个别名;2.重新定义这个方法;3.在新的方法中调用老的方法。
注 12: 1.环绕别名是一种猴子补丁,可能会破坏已有代码。2.你永远不该把一个环绕别名加载两次。