一、 面向对象概念
面向对象程序设计语言通常应该具有如下三个特征:封装、继承、多态。与java等不同的是,Ruby可以在类定义表达式中写入任何表达式。
类:类是定义某些实例应该具有某些共性的概念。
在Ruby中,类也是一个对象,它是Class类的实例。
1. 动态追加类定义:因为Ruby语言是一门动态语言,因此,它允许随时更改类定义。如果我们在定义一个类时,该类已经存在,则此时的定义是对先前类定义的追加,而不是重新定义。
2. 内部类定义:把一个类定义放在其他类定义中,形成类的嵌套。
3. 特殊类定义:Ruby还允许为某个特定对象追加方法和变量。追加的方法和变量并不应用于该对象所属的类,但该对象已经具有了追加的方法。
4. 构造器:当我们调用new方法来创建某个类的实例时,系统会调用该类定义里的initialize方法。Ruby语言的一个类定义中不能包含2个同名的方法。
二、 类的继承
1. 继承(Extends):语法,只需在原有类定义的后面加‘’。如果我们显示指定两个类不属于同一个父类,则前后两次定义类将会引起冲突。Ruby不支持多重继承!!!!
2. 调用父类构造器:我们使用super调用。语法:super(值列表)
3. 覆盖父类的方法:子类从父类那里继承来的方法是先定义的方法,而后面重新定义的方法会覆盖从父类继承来的方法。Ruby不支持重载。
4. 深入方法:我们可以在最后一个参数前面增加(*)或(&)。若最后一个参数的前面有(*),则方法调用时所有剩下的参数值被当作成数组传递给该参数。若最后一个参数前面有(&),则表明传递给该参数的块是一个过程对象(Proc)。
5. 使用Hash对象作为参数。。。通过使用Hash对象作为参数,就可以实现可变长度参数的功能。
6. 可变长度形参的定义方法:定义形参个数不确定的方法。Ruby把长度变化的多个形参当成数组处理。如果我们希望某个形参是长度可变的参数,只需在该形参前增加(*)号即可。
7. 使用数组参数:我们可以在调用一个方法时把一个数组当成多个参数值传入。此时,需要在该数组前增加一个(*)。
三、 在方法中使用块
1. 使用yield调用块:在软件开发领域,有一条重要的DRY规则:不要重复。在调用yield时,还可以将方法里的变量传入代码块。
2. Proc参数:如果我们在定义方法时,在最后一个形参前增加一个“&”符号,则Ruby把它作为一个过程对象(Proc类的实例)来处理。当Ruby把一个带&的参数当成Proc对象处理时,我们就可以在该方法中把该Proc对象赋给其他变量,或者直接返回给Proc对象。还要一个简单的生成Proc对象的方式,就是调用proc方法。
3. 动态执行代码:eval函数用来动态执行Ruby代码。