2011-12-06 26 views
5

Sto lavorando su Learning Ruby the Hard Way online; Ho appena terminato il 26 ° esercizio che è stato un "test" in base al quale è stato corretto il codice di qualcuno.Nozioni di base Ruby: metodo pop nell'array

Il mio problema è venuto con l'utilizzo di un argomento con il metodo pop. Ho familiarità con le basi, ma la risposta corretta significava cambiare argomento da "-1" a "1", e non sono sicuro di cosa significhi, esattamente.

La linea in questione è:

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

assumo si apre il secondo elemento della matrice ma desidero conferma o aiuto, a seconda dei casi.

Mille grazie per aver letto!

+1

Non date per scontato, usare 'RI Array.pop'. –

risposta

3

la migliore conferma si può avere nella documentazione di Array # pop: http://rubydoc.info/stdlib/core/1.9.3/Array:pop

Secondo tale, l'argomento specifica quanti elementi, contando dalla parte posteriore della matrice, per rimuovere.

L'unica differenza tra pop() e pop(1) è che il primo restituirà un singolo elemento (quello eliminato), mentre il secondo restituirà un array con un unico elemento (di nuovo, quello eliminato).

Edit: Suppongo che il motivo per il test utilizzato -1 è quello di insegnare la differenza tra l'accesso array con #[], dove -1 significherebbe l'ultimo elemento, e metodi come pop, che si aspettano un importo, non è una posizione , come argomento.

+0

Ottima risposta, ha perfettamente senso. Era la prima volta che vedevo qualcosa del genere, quindi ero confuso. (Grazie anche per il link ai documenti, spero di poter risolvere subito le domande stoooopid.) – helipacter

2

L'argomento specifica il numero di elementi da inserire. Se si specifica un argomento che restituisce un array, mentre non specifica un argomento restituisce solo l'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

Grazie anche per l'aiuto! Lo apprezzo davvero! – helipacter

Problemi correlati