ruby系列教材(8):Classes and Methods

上一篇 / 下一篇  2008-02-02 14:52:20 / 个人分类:Ruby

假如你没有厌烦,那么你激动的时候到了,上面我们从来没有完整的写过一个复杂的程序,因为我们了解的还不够,接下来,兴奋的东西开始了,拭目以待!

 

1.类的建立:

class Song

  def initialize(name, artist, duration)

    @name=name

    @artist=artist

    @duration = duration

  end

end

 

1)类的建立使用关键字 class

2)initialize是一个特殊的method,在使用new创建对象的时候,Ruby先分配内存给object,就是为所有的instance variables分配空间,再调用initialize method,初始化object

3)所有的instance variables都可以被类里面的所有方法访问

 

我们看看上面那个类的使用

song = Song.new("Bicylops", "Fleck", 260)

song.inspect→#<Song:0x1c7ca8 @name="Bicylops", @duration=260,@artist="Fleck">

 

inspect是一个message,我们前面提过这个概念,相对的我们说这个object是一个receiver,inspect这个message是每个receiver都可以使用的,通俗的说,所有的object都可以使用inspect,inspect显示了object’s ID和所有的instance variables 

 

另外有一个更加常用的message---to_s,这里使用:

song = Song.new("Bicylops", "Fleck", 260)

song.to_s→"#<Song:0x1c7ec4>"                    #显示object's id

 

override to_s可以帮助我们使用更好的方式来显示一个类

ruby的类永远不是closed,也就是说,你任何时候你都可以向已有的类里面添加方法,这是一个让人惊讶的ruby way!假如在c++,java里面,我们要添加一个method,该怎么做?必须继承它,然后添加,因为java和c++认为,你添加新方法以后,你就不是这个类了,而我们知道,事物是相对的,比如说,car,在我们看来car,需要对它的外观审视,使用性能做检查等等,在制造商哪里,却包含一些我们并不熟悉的行为,比如检查发动机的情况,测试汽车撞击损坏程度。当然我们可以硬说这些car不是同个类别(实际上是car类),其实,我想这只是我们使用事物的方式不同而已。现在ruby为我们提供了一种方式,可以方便的修改,也就是说,如果我是厂商,我的car要加入检查发动机这个行为,我就加入就可以了,不需要继承,当然这不是说ruby就不用继承了,继承非常重要,因为继承所有的类才会有to_s方法。添加方法这样的方式是否会带来副作用,可能还需要时间去考证吧。

 

注意,我们一直说的是添加方法,其实我们通过添加方法,可以实现添加属性(不推荐使用,后面会提到)

 

那么如何添加一个方法到一个类里面去?很简单:再写一次定义。例如:

class Song
  def initialize(a,b,c)
    @a=a
    @b=b
    @c=c
  end
end

song = Song.new("Bicylops","Fleck",260)

 

#add a method to Song

class Song
  def to_s
    "#@a,#@b,#@c"
  end
end

song2 = Song.new("Bicylops","Fleck",260)
print song2.to_s,"\n"                # 使用添加的方法
print song.to_s                         # 即使以前创建的类,也可以使用新添加的方法

结果是:

Bicylops,Fleck,260
Bicylops,Fleck,260


TAG: Ruby

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-10  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 22921
  • 日志数: 47
  • 建立时间: 2008-01-29
  • 更新时间: 2008-02-02

RSS订阅

Open Toolbar