Array prepending nil object


#1

I’m going through Brian Schröder’s tutorial and hit a small snag. The
code is (on page 16):

print 'Array as stack: ’
stack = Array.new()
stack.push(‘a’)
stack.push(‘b’)
stack.push(‘c’)
print stack.pop until stack.empty?

The display that I’m getting is:
Array as stack: cbanil

So somehow nil is creeping it’s way into my array but I’m not sure
how. Any ideas?


#2

Serdar Kılıç wrote:

The display that I’m getting is:
Array as stack: cbanil

So somehow nil is creeping it’s way into my array but I’m not sure
how. Any ideas?

The nil is just the return value of the last expression, not part of the
output of the print calls.

You can see it more clearly in irb:

irb(main):001:0> print 'Array as stack: ’
Array as stack: => nil
irb(main):002:0> stack = Array.new()
=> []
irb(main):003:0> stack.push(‘a’)
=> [“a”]
irb(main):004:0> stack.push(‘b’)
=> [“a”, “b”]
irb(main):005:0> stack.push(‘c’)
=> [“a”, “b”, “c”]
irb(main):006:0> print stack.pop until stack.empty?
cba=> nil

The printed output shows up on the left of the =>.


#3

Thanks Joel. I did actually use irb but only through MINGW on Windows
XP, where unfortunately you don’t get the descriptive “code/line
marker” thingys.


#4

Thank you too Brian, that makes it quite clear.


#5

On Jan 31, 2006, at 12:54 AM, Serdar Kõlõ wrote:

So somehow nil is creeping it’s way into my array but I’m not sure
how. Any ideas?

You are running this inside irb. print returns nil, which you are
interpreting as being part of the output.

Try adding:

print "\n"

To the bottom of your example.

Brian