`
maowoer
  • 浏览: 1971 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

菜鸟问道:类如何作为形参传递给一个方法?

阅读更多
知道这里都是达人,但碰到的问题实在解决不了,只好冒昧来问,希望不要拍砖。 本人以后会经常骚扰各位老大的清净的。

看《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的实例作为形参传递出了问题,但是不知道怎么解决!


拜托不嫌我老大们给点儿指点吧!
分享到:
评论
3 楼 maowoer 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的值。
2 楼 maowoer 2007-11-05  
啊,谢谢! 虽然本帖被扣了十分,但是还是很值得,问题已经解决,谢谢onathan_zz!
1 楼 jonathan_zz 2007-11-03  
你调用的duration方法没有定义啊,至少需要这样声明一下:
attr_reader :duration

相关推荐

Global site tag (gtag.js) - Google Analytics