ExpertiDict

Ruby · Avançado · Inglês · Técnico

method missing

/ˈmɛθəd ˈmɪsɪŋ/método

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 xis

Exemplos

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

Veja também

Todos os termos de Ruby