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

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

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


拜托不嫌我老大们给点儿指点吧!

你可能感兴趣的:(Ruby)