In Ruby, gli oggetti hanno un metodo pratico chiamato method_missing
che permette di gestire le chiamate di metodo per i metodi che non sono nemmeno stati (esplicitamente) definito:Esistono equivalenti a method_missing di Ruby in altre lingue?
Invocato da Ruby quando obj viene inviato un messaggio che non può gestire. symbol è il simbolo per il metodo chiamato, e args sono tutti gli argomenti che sono stati passati ad esso. Per impostazione predefinita, l'interprete genera un errore quando viene chiamato questo metodo. Tuttavia, è possibile sovrascrivere il metodo per fornire un comportamento più dinamico. L'esempio seguente crea una classe Roman, che risponde ai metodi con nomi costituiti da numeri romani, restituendo i corrispondenti valori interi.
class Roman
def romanToInt(str)
# ...
end
def method_missing(methId)
str = methId.id2name
romanToInt(str)
end
end
r = Roman.new
r.iv #=> 4
r.xxiii #=> 23
r.mm #=> 2000
Ad esempio, rubino sulle rotaie utilizza questo per consentire le chiamate a metodi come find_by_my_column_name
.
La mia domanda è, quali altre lingue supportano un equivalente a method_missing
e come si implementa l'equivalente nel codice?
'roman_to_int' ha un'implementazione vuota, quindi perché r.iv restituisce 4? – Tim
@Tim Supponiamo di riempire lo spazio vuoto con il codice che restituirebbe un valore. Ha appena deciso di non mostrare tutti i dettagli. Questo potrebbe essere implementato con un numero romano al convertitore di numeri. –