Esiste una convenzione Ruby per la denominazione dei metodi utilizzando bang (!
). La convenzione è se il metodo cambia self
, usiamo bang per far conoscere agli altri il bahaviour auto modificante.Perché la convenzione Ruby non viene seguita per l'array # keep_if?
Ad esempio Array#select
non cambia self
, ma Array#select!
sì. Ma lo Array#keep_if
cambia autonomamente. Non c'è nulla chiamato Array#keep_if!
.
Quale potrebbe essere la ragione per non seguire la convenzione?
Ci sono diversi metodi che cambiano 'self' i cui nomi non terminano con un punto esclamativo, come ad esempio la modalità Array'' delete' ',' 'delete_at' e delete_if'. Presumo che questi non siano sbalzati perché è ovvio dal nome che cambiano 'self' (anche se' String # delete' no!). Per estensione, dato che 'keep_if' è l'opposto di' delete_if' il primo non è sbattuto. 'Array # concat' è un esempio di un altro metodo che non è sbattuto perché è ovvio che cambia' self'. –