Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby Basics: Pop Method in Array

I'm working my way through Learning Ruby the Hard Way online; I've just finished the 26th exercise which was a "test" whereby you fixed someone's broken code.

My problem came with using an argument with the pop method. I'm familiar with the basics but the correct answer meant changing the argument from "-1" to "1", and I'm not sure what it means, exactly.

The line in question is:

def puts_last_word(words)
    word = words.pop(1)
    puts word
end

I assume it pops the second element from the array but I would like confirmation or help, whichever is appropriate.

like image 941
helipacter Avatar asked Dec 06 '11 23:12

helipacter


2 Answers

The best confirmation can be had in the documentation of Array#pop: http://rubydoc.info/stdlib/core/1.9.3/Array:pop

According to that, the argument specifies how many elements, counting from the back of the array, to remove.

The only difference between pop() and pop(1) is that the former will return a single element (the deleted one), while the latter will return an array with a single element (again, the deleted one).

Edit: I suppose the reason the test used -1 is to teach you about the difference between array access with #[], where -1 would mean the last element, and methods like pop, that expect an amount, not a position, as their argument.

like image 113
Dominik Honnef Avatar answered Sep 20 '22 00:09

Dominik Honnef


The argument specifies how many items to pop. If you specify an argument it returns an array whereas not specifying an argument returns just the element:

ruby-1.8.7-p352 :006 > a = [1,2,3]
=> [1, 2, 3] 
ruby-1.8.7-p352 :007 > a.pop(1)
=> [3] 
ruby-1.8.7-p352 :008 > a = [4,5,6]
=> [4, 5, 6] 
ruby-1.8.7-p352 :009 > a.pop(2)
=> [5, 6]
ruby-1.8.7-p352 :010 > a.pop
=> 4 
like image 40
kwarrick Avatar answered Sep 19 '22 00:09

kwarrick