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元编程的主要内容,如果未能解决你的问题,请参考以下文章