class Song
def initialize(name, artist, duration)
@name=name
@artist=artist
@duration=duration
end
attr_accessor :name, :duration, :artist
end
class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)
super(name, artist, duration)
@lyrics=lyrics
end
attr_writer :lyrics
attr_reader :lyrics
end
class SongList
def initialize
@songs= Array.new
end
def append(song)
@songs.push(song)
self
end
def delete_first
@songs.shift
end
def delete_last
@songs.pop
end
def [](index)
@songs[index]
end
end
require 'test/unit'
class TestSongList < Test::Unit::TestCase
def test_delete
list = SongList.new
s1 =Song.new('title1','artist1',1)
s2 =Song.new('title2','artist2',2)
s3 =Song.new('title3','artist3',3)
s4 =Song.new('title4','artist4',4)
list.append(s1).append(s2).append(s3).append(s4)
assert_equal(s1, list[0])
assert_equal(s3,list[2])
assert_nil(list[9])
assert_equal(s1,list.delete_first)
assert_equal(s2,list.delete_first)
assert_equal(s4,list.delete_last)
assert_equal(s3,list.delete_last)
end
end
def initialize(name, artist, duration)
@name=name
@artist=artist
@duration=duration
end
attr_accessor :name, :duration, :artist
end
class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)
super(name, artist, duration)
@lyrics=lyrics
end
attr_writer :lyrics
attr_reader :lyrics
end
class SongList
def initialize
@songs= Array.new
end
def append(song)
@songs.push(song)
self
end
def delete_first
@songs.shift
end
def delete_last
@songs.pop
end
def [](index)
@songs[index]
end
end
require 'test/unit'
class TestSongList < Test::Unit::TestCase
def test_delete
list = SongList.new
s1 =Song.new('title1','artist1',1)
s2 =Song.new('title2','artist2',2)
s3 =Song.new('title3','artist3',3)
s4 =Song.new('title4','artist4',4)
list.append(s1).append(s2).append(s3).append(s4)
assert_equal(s1, list[0])
assert_equal(s3,list[2])
assert_nil(list[9])
assert_equal(s1,list.delete_first)
assert_equal(s2,list.delete_first)
assert_equal(s4,list.delete_last)
assert_equal(s3,list.delete_last)
end
end
本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/64010,如需转载请自行联系原作者