NameError:未初始化的常量歌曲…正在编程Ruby

NameError:未初始化的常量歌曲…正在编程Ruby,ruby,class,nameerror,Ruby,Class,Nameerror,我试图通过这个ruby编程网站来学习ruby,但我被这种语法卡住了 class SongList def initialize @songs = Array.new end def append(aSong) @songs.push(aSong) self end def deleteFirst @songs.shift end def deleteLast @songs.pop end end 当我去添加一

我试图通过这个ruby编程网站来学习ruby,但我被这种语法卡住了

class SongList


  def initialize
    @songs = Array.new
  end

  def append(aSong)
    @songs.push(aSong)
    self
  end


  def deleteFirst
    @songs.shift
  end
  def deleteLast
    @songs.pop
  end


end
当我去添加一首歌

list = SongList.new
list.append(Song.new('title1', 'artist1', 1))
我收到以下错误消息:

NameError: uninitialized constant Song ...Programming Ruby 
我知道我需要变量Song,但我不确定在SongList类中的何处执行该操作……

您可以使用Ruby类:

Struct
是一种方便的方法,可以使用访问器方法将多个属性捆绑在一起,而无需编写显式类

class歌曲列表
def初始化
@songs=[]#使用[]而不是Array.new
结束
def附加(ASON)
@歌曲推送(ASON)
自己
结束
def先删除_
@歌曲.shift
结束
def delete_last
@流行歌曲
结束
结束
Song=Struct.new(:Song\u name,:singer,:var)
list=SongList.new
列表.附加(歌曲.新('title1','artist1',1))
#=>#var=1>]>

您需要创建一个
歌曲
类。看起来他们可能正在使用具有类定义的某个变体。
class SongList
  def initialize
    @songs = [] # use [] instead of Array.new
  end

  def append(aSong)
    @songs.push(aSong)
    self
  end

  def delete_first
    @songs.shift
  end
  def delete_last
    @songs.pop
  end
end

Song = Struct.new(:song_name, :singer, :var)

list = SongList.new
list.append(Song.new('title1', 'artist1', 1))
# => #<SongList:0x9763870
#     @songs=[#<struct Song song_name="title1", singer="artist1", var=1>]> var=1>]>