Ruby <Ruby 元编程>思维导图 5 (类定义)

flingjie · 2014年05月06日 · 2473 次阅读

在 Ruby 中,使用 class 定义类时,实际上是在运行代码,这与 java 之类的静态语言有很大的差别。
另外,类只是一个增强的模块,因此,任何适用于类的东西也适用于模块。

  • 注 1:在类 (或模块) 定义时,类本身充当了当前对象 self 的角色。 ``` ruby result = class MyClass self end

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.你永远不该把一个环绕别名加载两次。

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