Ruby y otros idiomas (como Smalltalk y Objective-C) prefieren el término "paso de mensajes", mientras que Java y C++ prefieren "invocación de método". Es decir, la "forma Java" es llamar a un método en un objeto — ejecutando código en el contexto de un objeto —, mientras que la "forma Ruby" es enviar un objeto a un mensaje, al que el objeto responde ejecutando su método.
Ruby describiría la línea my_string.length
como "enviando my_string
el mensaje length
". El my_string
recibe el mensaje, y así se llama el receptor; dentro de la definición del método length
, self
se referiría a my_string
. Puede obtener el mismo efecto con my_string.send(:length)
.
Pensar en este concepto en términos de transmisión de mensajes es más flexible que pensar en términos de invocación de métodos. Para invocar un método en un objeto, ese método debe haber sido predefinido, mientras que puede enviar a un objeto un mensaje que puede elegir manejar dinámicamente (con respond_to?
y method_missing
).Esta flexibilidad es un aspecto que permite que Ruby se utilice como lenguajes específicos de dominio conciso (DSL).
http://www.jimmycuadra.com/posts/self-in-ruby – royhowie