码迷,mamicode.com
首页 > 其他好文 > 详细

3-8《Ruby元编程》

时间:2018-03-08 22:57:05      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:locate   定义   app   self   允许   some   exe   防止   cal   

《Ruby元编程》


 

第二章 对象模型

类定义揭秘inside class definitions: class关键字更像一个作用域操作符,核心作用是可以在里面随时定义方法。

 

[].methods.grep(/^re/):调用 出Array的所有以re开头的method.

 

Monkeypatch:涉及全局修改,定义某个方法前应该仔细检查该类是否已有同名的方法。 

 

实例对象存放在对象中,方法存放在类中。

 

类的真相:类本身也是对象。Ruby允许在运行时修改类的信息。

 Class.instance_methods

 Array.superclass  =>Object

 

模块 

类也是模块,是带有三个方法new,allocate,superclass的增强模块。

代码要include,使用module.代码需要被实例化或被继承用class.

 

就是一个对象外加一组实例方法和一个对其超类的引用。 类和其他对象一样必须通过引用来访问。 

 

2.4What Happends when you call a method?

  1. 查找方法。Method lookup. receiver和ancestors-chain
  2. 执行这个方法。self 


include:把模块插到祖先链中包含它的该类的后面。先查找该类的method。

prepend: 把模块插到祖先链中包含它的该类的前面。先在prepend 模块中查找method。

 

kernel是核心模块被Object包含了。通过给Kernel模块加一个方法,就对所有对象可用了。这个方法称作内核方法.如Awesome_print包的方法ap就用了内核方法。

 

Method Execution

Ruby的每一行代码都会在一个对象中被执行--这个对象就是当前对象,self 

没有明确指定receiver的method都在self上调用。

 

Private私有方法

1.如果调用方法的接收者不是自己,就必须指明接受者

2.私有方法只能通过隐性的接受者self调用。 

所以只能在自身中调用私有方法,或者继承来的私有方法。

 

在类和模块定义中,self是这个类或模块本身。

 

Refinement求精炼,细化:防止猴子补丁的破坏。

  1. 首先,定义一个模块
  2.  然后,在这个模块的定义中调用refine方法。
  3. 在一个模块内部,使用using method_name,细化的作用范围就限定在该模块内部了。

 

3-8《Ruby元编程》

标签:locate   定义   app   self   允许   some   exe   防止   cal   

原文地址:https://www.cnblogs.com/chentianwei/p/8531089.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!