Estoy aprendiendo Ruby y he visto que un signo de exclamación al final de un nombre de método por convención significa que el método modifica self
de alguna manera. ¿Por qué entonces no termina Array#delete
con un signo de exclamación, como slice!
, ya que delete
borra un elemento de self
? ¿Me estoy perdiendo algo fundamental?Convención de nomenclatura: ¿Por qué Array # delete no tiene signo de exclamación al final?
10
A
Respuesta
15
Para citar Matz (ingeniero jefe de Ruby): (!)
La explosión no significa "destructor", ni la falta de ella significa que no destructiva tampoco. El signo de bang significa que "la versión de bang es más peligrosa que su equivalente no explosiva; manipúlala con cuidado".
Dado que Array#delete
no tiene una contraparte menos peligrosa, no hay necesidad de la exclamación.
4
Los métodos "bang" no significan que modifique el receptor. Es una indicación de un método que es una versión más peligrosa de un método existente. Consulte David A. Black's description de la diferencia y response to a request para cambiar Ruby 2.0.
Este es un error muy común. Tenga en cuenta el muy voto muy erróneo respuesta here.
Cuestiones relacionadas
- 1. ¿Por qué método pop de la matriz no tiene un signo de exclamación?
- 2. serialVersionUID convención de nomenclatura
- 3. ¿Signo de exclamación doble?
- 4. ¡Qué hace! (doble signo de exclamación) significa?
- 5. ¿Por qué razón tenemos la convención de nomenclatura de lower_case_with_underscores?
- 6. F # convención de nomenclatura
- 7. Poner coma (,) al final de la matriz. ¿Es una convención?
- 8. ¿Qué hace un solo signo de exclamación en YAML?
- 9. ¿Qué llamadas REST PUT/POST/DELETE deben devolver por convención?
- 10. variable constante de Java, convención de nomenclatura
- 11. Enum convención de nomenclatura - Plural
- 12. Variable de nomenclatura, mejor convención
- 13. identidad SqlServer convención de nomenclatura
- 14. Convención de nomenclatura para restricción única
- 15. Convención de nomenclatura para vistas de Django?
- 16. Quitar dtype al final de numpy array
- 17. Convención de nomenclatura para campos privados
- 18. convención de nomenclatura para mayúsculas abreviaturas
- 19. convención de nomenclatura de recursos XAML
- 20. ¿Cómo funciona la convención de nomenclatura cakePHP?
- 21. ¿Convención de nomenclatura de ID en ASP.NET?
- 22. Convención de nomenclatura para objetos en java
- 23. método Objective C convención de nomenclatura
- 24. paquete de pruebas unitarias convención de nomenclatura
- 25. ¿Qué convención de nomenclatura usas para el Patrón Decorador?
- 26. Proyectos/Convención de nomenclatura de paquetes?
- 27. Convención de nomenclatura para widgets de Qt
- 28. ¿por qué la directiva #include no tiene un punto y coma al final de la instrucción?
- 29. Visibilidad Autobinding con la convención de nomenclatura
- 30. convención de nomenclatura de clase abstracta
Supongo que porque '# delete' solo puede eliminarse, por lo que no es necesario marcarlo. Algo como '# upper_case' se puede asignar a un objeto recién creado o sobrescribir el objeto original en la determinación del uso. – ScottJShea
Sí, pero #delete sin indicador también podría devolver un clon menos el elemento especificado (Eso es lo que esperaba dada la ausencia de un indicador) :) –
posible duplicado de [¿Por qué se usan los signos de admiración en los métodos de Ruby?] (Http: //stackoverflow.com/questions/612189/why-are-exclamation-marks-used-in-ruby-methods) –