2009-04-02 11 views

risposta

31

I metodi con un punto esclamativo alla fine sono spesso chiamati metodi bang. Un metodo bang non modifica necessariamente il suo ricevitore e non vi è alcuna garanzia che i metodi senza un punto esclamativo non lo facciano.

È tutto molto ben spiegato in this blog post. Per citare il post:

Il! nei nomi dei metodi che terminano con! significa "Questo metodo è pericoloso" - o, più precisamente, questo metodo è la versione "pericolosa" di un altro metodo equivalente , con lo stesso nome meno il!. "Pericolo" è relativo; il ! non significa assolutamente nulla a meno che il nome del metodo in cui è corrisponda a un nome di metodo simile ma senza bagliore.

e

L'! non significa "Questo metodo cambia ricevitore." Molti dei metodi "pericolosi" cambiano i loro ricevitori . Ma alcuni no. Io ripeto: ! non significa che il metodo cambia il suo ricevitore .

11

Il metodo non-bang downcase() restituisce semplicemente un nuovo oggetto che rappresenta la stringa di downcased.

La versione bang modifica la stringa stessa.

my_text = "MY TEXT" 
my_new_text = my_text.downcase 
puts my_new_text # will print out "my text" 
puts my_text  # will print out "MY TEXT" - the non-bang method doesn't touch it 

my_text.downcase! 

puts my_text # will print out "my text". The bang version has modified the object you're calling the method on