Sto imparando Ruby e ho visto che un punto esclamativo alla fine di un nome di metodo per convenzione significa che il metodo modifica self
in qualche modo. Perché quindi non Array#delete
termina con un punto esclamativo, come slice!
, poiché delete
elimina un elemento da self
? Mi manca qualcosa di fondamentale?Convenzione di denominazione: perché l'array # delete non ha un punto esclamativo alla fine?
10
A
risposta
15
Per citare Matz (ingegnere capo di Ruby): (!)
Il botto non significa "distruttiva", né la mancanza di essa significa non distruttiva sia. Il segno del botto significa "la versione bang è più pericolosa della sua controparte non bang, maneggia con cura".
Dal Array#delete
non ha una controparte meno pericolosa, non è necessario per l'esclamazione.
4
I metodi "bang" non significano che modifica il ricevitore. È un'indicazione di un metodo che è una versione più pericolosa di un metodo esistente. Vedere David A. Black's description della differenza e response to a request per modificare Ruby 2.0.
Questo è un malinteso molto comune. Nota il molto votato errato risposta here.
La mia ipotesi è perché '# delete' può fare solo cancellare quindi non c'è bisogno di contrassegnarlo. Qualcosa come "# upper_case" può essere assegnato a un oggetto appena creato o sovrascrivere l'oggetto originale al momento della determinazione dell'uso. – ScottJShea
Sì, ma #delete senza flag potrebbe anche restituire un clone meno l'elemento specificato (Questo è quello che mi aspettavo data l'assenza di un flag) :) –
possibile duplicato di [Perché i punti esclamativi sono usati nei metodi Ruby?] (Http: //stackoverflow.com/questions/612189/why-are-exclamation-marks-used-in-ruby-methods) –