浏览 2847 次
锁定老帖子 主题:菜鸟问道:类如何作为形参传递给一个方法?
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-03
看《Programming Ruby》中类方法一章如下代码: class SongList MAX_TIME = 5*60 def SongList.is_too_long(song) return song.duration > MAX_TIME end end song1=Song.new("Bicyclops","Fleck",260) SongList.is_too_long(song1) song2=Song.new("The Calling","Santana",468) SongList.is_too_long(song2) 其中Song的定义如下: class Song @@plays = 0 def initialize(name,artist,duration) @name=name @artist=artist @duration=duration @plays=0 end def play @plays+=1 @@plays+=1 "This song: #{@plays} plays. Total #{@@plays} plays." end end 但是程序执行的时候,报:./song.rb:26:in `is_too_long': undefined method `duration' for #<Song:0x1f06dc3> (NoMethodError。 我知道可能是因为把类Song的实例作为形参传递出了问题,但是不知道怎么解决! 拜托不嫌我老大们给点儿指点吧! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-03
你调用的duration方法没有定义啊,至少需要这样声明一下:
attr_reader :duration |
|
返回顶楼 | |
发表时间:2007-11-05
啊,谢谢! 虽然本帖被扣了十分,但是还是很值得,问题已经解决,谢谢onathan_zz!
|
|
返回顶楼 | |
发表时间:2007-11-05
得到jonathan_zz提示,定义song.duration方法,
class SongList MAX_TIME = 5*60 def SongList.is_too_long(song) def song.duration @duration end return song.duration > MAX_TIME end end 该方法自动返回@duration的值。 |
|
返回顶楼 | |