首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Ruby的部分类

Posted on 2010-01-29 15:26  停留的风  阅读(1424)  评论(5编辑  收藏  举报
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方法。

在我们使用的过程一定要注意这一点,通常会将部分类放到配置文件中,在程序执行时就全部加载。