2011-12-06 9 views
5

Estoy trabajando en mi camino a través de Learning Ruby the Hard Way en línea; Acabo de terminar el vigésimo sexto ejercicio, que fue una "prueba" mediante la cual se corrigió el código roto de alguien.Ruby Basics: Pop Method in Array

Mi problema vino cuando usé un argumento con el método pop. Estoy familiarizado con los conceptos básicos, pero la respuesta correcta significaba cambiar el argumento de "-1" a "1", y no estoy seguro de lo que significa, exactamente.

La línea en cuestión es:

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

Asumo que aparece el segundo elemento de la matriz, pero me gustaría confirmación o ayuda, según sea el caso.

Muchas gracias por leerlo!

+1

No asuma, use 'ri Array.pop'. –

Respuesta

3

La mejor confirmación se puede tener en la documentación de la matriz # pop: http://rubydoc.info/stdlib/core/1.9.3/Array:pop

De acuerdo con esto, el argumento especifica el número de elementos, contados a partir de la parte posterior de la matriz, para eliminar.

La única diferencia entre pop() y pop(1) es que el primero devolverá un solo elemento (el suprimen uno), mientras que el segundo devolver una matriz con un solo elemento (de nuevo, el borrado uno).

Editar: Supongo que la razón de la prueba utilizada -1 es enseñarle acerca de la diferencia entre el acceso matriz con #[], donde -1 significaría el último elemento, y métodos como pop, que esperan una cantidad, no una posición como su argumento

+0

Excelente respuesta, tiene sentido. Era la primera vez que veía algo así, así que estaba confundido. (Gracias por el enlace a los documentos también, con suerte voy a cortar las preguntas de stoooopid ahora.) – helipacter

2

El argumento especifica cuántos elementos mostrar. Si especifica un argumento, devuelve una matriz mientras que al no especificar un argumento solo devuelve el elemento:

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 
+0

¡Gracias también por la ayuda! ¡Realmente lo aprecio! – helipacter