1 class Person
2 def hello
3 puts "Hello!"
4 end
5 end
6
7 class Person
8 def goodbye
9 puts "Goodbye!"
10 end
11 end
12
13 #测试
14 p1 = Person.new
15 p1.hello # Hello!
16 p1.goodbye # Goodbye!
这个代码也许大家都见过,如果是从高级语言转攻ruby的,可能很奇怪,这样能运行吗?在高级语言中,拿C#举例,这样的代码显然不能运行。
但是这就是Ruby中的部分类的实现。不用借助其他即可实现部分类。而C#中部分类的实现却要借助partial关键字来实现。如下:
1 public partial class Person
2 {
3 public void hello(){}
4 }
5
6 public partial class Person
7 {
8 public void goodbye(){}
9 }
部分类的优点:
1、你可以将部分类写在一个文件或者多个文件中,对类进行扩展。
2、可以重写类的方法
module,也具有此种特性
1 #module扩展
2 module Travel
3 def forward
4 puts "Forward"
5 end
6 end
7
8 module Travel
9 def backward
10 puts "Backward"
11 end
12 end
13
14 puts Travel.instance_methods # backward forward
注意:
Ruby的部分类与C#的部分类还有一些差别。
如果是高级语言,编译器会将这几个文件组合起来一起编译。无论在哪里,调用的这个都是同一个类(几个文件组合到一起,编译成的)。
而Ruby是脚本语言,是解释执行的。执行一个部分类,这个部分类的方法就被加载进去,一些还没有执行的,在这里它的方法还不能够直接调用。就想开始的例子,
当程序运行至第一个Person class 结束时,Person类只有hello方法,只有在执行完第二个Person class,Person类才有了goodbye方法。
在我们使用的过程一定要注意这一点,通常会将部分类放到配置文件中,在程序执行时就全部加载。