reavey <reavey / nep.net> writes: > I get an error > "NameError: undefined method 'push' for nil from append" > as I'm working thru the Prag prog ruby book. > """We'll start our class with a basic initialize method, which creates > the Array we'll use to hold our songs and store a reference to it in > the instance variable @songs > > class SongList > def initialize > @songs = Array.new > end > def append(aSong) > @songs.push(aSong) > self > end > end > > list = SongList.new > list. > append(Song.new('title1', 'artist1', 1)). > append(Song.new('title2', 'artist2', 2)) """ The code you posted simply shouldn't report that error. Here is my IRB session: irb(main):001:0> class SongList irb(main):002:1> def initialize irb(main):003:2> @songs = [] irb(main):004:2> end irb(main):005:1> def append(song) irb(main):006:2> @songs.push(song) irb(main):007:2> self irb(main):008:2> end irb(main):009:1> end => nil irb(main):010:0> list = SongList.new => #<SongList:0x401c4c10 @songs=[]> irb(main):011:0> list.append("foo").append("bar") => #<SongList:0x401c4c10 @songs=["foo", "bar"]> P.S. for this test it doesn't matter what objects you pass to SongList#append, since it just appends it to the @songs array. -- matt