Ruby号称是一门面向对象的语言,对象势必是首当其冲的应该提到的,这一篇我们就来学习学习类,对象和变量,说明一下,我自己也是边摸索边学,之前也没有接触过一门类似的语言,这在开篇就提到了,我是结合网络资源和《Programming Ruby 2nd》学习的,至于写这些文字,也只是为了加深印象,也是为了“鞭笞”自己继续的学习下去,不然哪天找个借口就。。。题外话:)。
我们先来看下类的定义:(来自programming ruby 2nd ,以后的例子也大部分来自于本书)
- #定义一个类Song,只包含一个方法initialize
- class Song
- def initialize(name , artist , duration)
- @name = name
- @artist = artist
- @duration = duration
- end
- end
- #下面是实例化一个类
- song = Song.new("You're beautiful","James blunt" ,215)
- puts song.inspect
- #下面是得到的结果
- #<Song:0x2c12cd8 @duration=215, @name="You're beautiful", @artist="james blunt">
这里定义了一个类Song,其中包括一个方法initialize,这个方法包括三个参数。(注明下的是,在Ruby中一般类一般用大写字母开头,方法和局部变量以小写字母开始,@xxx表示一个实例变量,而$xxx表示一个全局变量。) 这里要说明下【initialize】方法,这个方法相当于Java , C#中的构造方法,可以用来初始化一个类,下面Song.new就用到了这个方法。而@name 表示一个实例变量,用法相当的简单就是一个名称前面加上@符号,实例变量可以在被该对象中所有的方法调用。所以在initialize的方法中赋值是最好不过的了。
最后还要提一下本例中使用的inspect 消息,他表现的是对象的id和实例变量。而在对象还有一个标准的消息(Message) to_s,一般来说【对象.to_s】反应的是对象的ID,比如本例就是#<Song:0x2c12cd8> , 当然我们可以重写这个to_s ,来输出一些对我们比较有用或者说关注的信息。
在Ruby中,类是永不关闭的,你可以随时的往里面增加你需要的方法。我们来重写一下上面的Song
- #定义一个类Song,只包含一个方法initialize
- class Song
- def initialize(name , artist , duration)
- @name = name
- @artist = artist
- @duration = duration
- end
- end
- #下面是实例化一个类
- song = Song.new("You're beautiful","James blunt" ,215)
- puts song.to_s
- #下面是得到的结果
- Song:You're beautiful--james blunt (215)
好了,今天就坚持到这了,明天继续:)