Ruby · Avançado · Inglês · Técnico
method missing
Hook chamado quando um objeto recebe uma mensagem que nenhum método atende. Sobrescrevê-lo permite tratar chamadas dinâmicas, como find_by_nome, criando interfaces flexíveis.
Onde usar
Está por trás de proxies, DSLs e dos antigos finders dinâmicos do Rails. No code review, exija que venha com respond_to_missing? e que chame super para o que não tratar.
Em código
class Fantasma
def method_missing(nome, *args)
return super unless nome.start_with?('x')
"uuu #{nome}"
end
end
puts Fantasma.new.xis # => uuu xisExemplos
The proxy forwards unknown calls through method missing.
O proxy repassa as chamadas desconhecidas por meio do method missing.
Always call super in method missing, or typos will vanish.
Sempre chame super no method missing, ou os erros de digitação vão sumir.
Cuidado
Sem chamar super, o NoMethodError some e erros de digitação passam despercebidos; além disso, é mais lento que um método definido.
Sinônimos
fantasma