Ruby元编程

Posted Ruby与Go研习社

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby元编程相关的知识,希望对你有一定的参考价值。

定义

  • 元编程是编写能写代码的代码

  • 元编程是编写能在运行时操作语言构件的代码。

对象模型

对象中有什么

  • 实例变量

  • 方法

  • 一个对象的实例变量存在于对象本身之中,而一个对象的方法存在于对象自身的类中

类的真相和继承关系

  • 类也是对象

  • 继承关系

class A
end

A.ancestors # => [A, Object, Kernel, BasicObject]
  • Class类的超类是Module,也就是说,每个类都是一个模块。

  • 准确地说,类就是带有3个方法(new, allocate, superclass)的增强模块。

常量

  • Module#constants 方法返回当前范围内的所有常量

  • Module.constants 方法返回当前程序中所有顶层的常量

  • Module.nesting 方法返回当前代码所在的路径

  • 命名空间:只用来充当常量容器的模块

对象和类的小结

  • 对象就是一组实例变量外加一个指向其类的引用

  • 类就是一个对象(Class类的一个实例)外加一组实例方法和一个对其超类的引用

  • class类是Module类的子类,因此一个类也是一个模块。

  • 类有自己的方法(比如new方法),这些是Class类的实例方法。

  • load用于加载代码,而require用来导入类库。require方法对每个文件只加载一次,而load方法在每次调用时都会再次运行所加载的文件。

方法查找

  • 方法查找过程:Ruby首先在接收者的类中查找,然后再顺着祖先链向上查找。

  • ancestors

  • include / prepend

  • 重复包含时,一个模块只会在一条祖先链中出现一次。

Kernel 模块

Object类包含了Kernel模块,因此Kernel就进入了每个对象的祖先链。 于是,每个对象都可以随意调用Kernel模块的方法。 这使得print看起来就像是一个关键字,其实它只是一个方法而已。

以上是关于Ruby元编程的主要内容,如果未能解决你的问题,请参考以下文章

Ruby元编程

为啥学习 Ruby 中的元编程和特征类很重要?

3-8《Ruby元编程》

Ruby 元编程:动态实例变量名

markdown Ruby元编程

ruby 元编程