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
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”]