Ruby e altri linguaggi (come Smalltalk e Objective-C) preferiscono il termine "message passing", mentre Java e C++ preferiscono "chiamata di metodo". Cioè, il "modo Java" consiste nel chiamare un metodo su un oggetto — codice in esecuzione nel contesto di un oggetto — mentre il "modo Ruby" è inviare un oggetto a un messaggio, al quale risponde l'oggetto eseguendo il suo metodo.
Ruby descrive la riga my_string.length
come "invio my_string
messaggio" length
". Il my_string
riceve il messaggio, e così viene chiamato il destinatario; all'interno della definizione del metodo length
, self
fare riferimento a my_string
. È possibile ottenere lo stesso effetto con my_string.send(:length)
.
Pensare a questo concetto in termini di passaggio di messaggi è più flessibile del pensare in termini di invocazione del metodo. Per invocare un metodo su un oggetto, tale metodo deve essere stato predefinito, mentre è possibile inviare a un oggetto un messaggio che può scegliere di gestire dinamicamente (con respond_to?
e method_missing
).Questa flessibilità è un aspetto che consente a Ruby di essere utilizzato come lingue specifiche del dominio (DSL) concise.
http://www.jimmycuadra.com/posts/self-in-ruby – royhowie