正文

ruby打印出类的属性2007-04-05 15:37:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/daweizhao/24619.html

分享到:

PR2是以一个卡拉OK点唱机为例子介绍Ruby编程的。新建一个songdata的文档,里面写入几个song的数据,然后从文件里读出数据并赋值给一个song对象然后打印出来。songdata文件中的内容如下:

/jazz/j00132.mp3 |3:45| fats Waller|Ain't Misbehavin'
/jazz/j00319.mp3 |2:58| Louis Armstring | Wonderful World
/bgrass/bg0732.mp3 |Strength in Numbers | Texas Red

程序相应内容如下:

require "Song_List"
require "song"

song_file=File.open("songdata.txt")
songs = SongList.new

song_file.each do |line|
fiel, length, name, title = line.chomp.split(/\s*\|\s*/)
songs.append(Song.new(title,name,length))
end
puts songs[1].to_s
puts songs[1].inspect

输出结果如下:

 name is Wonderful World, artist is Louis Armstring, duration is 2:58
#<Song:0x2a37e18 @duration="2:58", @name="Wonderful World", @artist="Louis Armst
ring">

1 其中因为用到了别的类,所以要用require引用一下,注意,引用的是文件名Song_List而不是类名songlist

2 song.rb中的to_s的方法定义如下:

def to_s
    " name is #@name, artist is #@artist, duration is #@duration"   
   end

其中类中要有定义属性:attr_reader :name, :artist,:duration

3 其中inspect方法适用于任何对象,用来打印出类的ID和类中的属性及其它东西

4 在打开文件时,原文件也用到了迭代:

File.open("songdata.txt") do |song_file|
songs = SongList.new

song_file.each do |line|
fiel, length, name, title = line.chomp.split(/\s*\|\s*/)
songs.append(Song.new(title,name,length))
end
#puts songs[1].to_s
puts songs[1].inspect
end

但只打开了一个文件,觉得可以不用迭代,则用上面最初的代码替换了一下,最后是可以的。即song_file=File.open("songdata.txt")

 5 第一个任务是要把每行分成各个字段, String#split 方法最适合最这个。在这里,我们给 split 传递一个正则表达式,/\s*|\s*/,它会用小竖线和空格来分隔一行文本,把文本分成各个字段。还有,因为因为用文件里读取的这行文本后面跟了一个换行符,在我们用split函数之前,我们可以使用String#chomp 来把换行符去掉 

6 name.squeeze!(" ")  掉那些额外的空格,使用这个方法的 squeeze! 格式,它会改变适当位置的字符串

阅读(2892) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册