From: Michael Fellinger Date: 2008-08-30T15:14:38+09:00 Subject: Re: array#push On Sat, Aug 30, 2008 at 3:02 PM, Ron Green wrote: > Given the foloowing code: > class Person > attr_accessor :first_name, :middle_name, :last_name > def whole_name > n = first_name + " " > n << "#{middle_name} " if middle_name > n << last_name > return n.size > end > end > > m = Person.new > m.first_name = "Sam" > m.middle_name = "Ray" > m.last_name = "Smith" > > x = m.whole_name > > puts x > > > Why is x =13 instead of 3? You are asking about Array#push, yet not using it. If you would try to replace '<<' with '.push' you would see that instead you are handling Strings. irb(main):001:0> a = 'Sam' => "Sam" irb(main):002:0> a << ' Ray' => "Sam Ray" irb(main):003:0> a = ['Sam'] => ["Sam"] irb(main):004:0> a << 'Ray' => ["Sam", "Ray"] irb(main):005:0> a = 'Sam' => "Sam" irb(main):006:0> a.push('Ray') NoMethodError: undefined method `push' for "Sam":String from (irb):6 irb(main):007:0> a = ['Sam'] => ["Sam"] irb(main):008:0> a.push('Ray') => ["Sam", "Ray"] > > -- > ron.green@gmail.com >