Ruby method missing (método faltando)

Quando você envia uma mensagem a um objeto, este executa o primeiro método que ele encontra no caminho de busca do método (arquivo PDF) com o mesmo nome da mensagem. Se ele falha em encontrar tal método, ele lança uma exceção do tipo NoMethodError – a menos que você tenha fornecido ao objeto um método chamado method_missing (método ausente). Ao método method_missing é passado o símbolo do método não existente, uma lista de argumentos que foram passados na chamada original e qualquer bloco passado ao método original.

method_missing faz parte de uma rede de segurança: Ele lhe fornece um jeito de interceptar mensagens não respondidas e trata-as de maneira elegante. Veja o exemplo p012zmm.rb abaixo:

1 class Dummy
2   def method_missing(m, *args, &block)  
3     puts "Não há nenhum método chamado #{m} aqui."  
4   end  
5 end  
6 Dummy.new.qualquer_coisa

A saída é:

1 >ruby p012zmm.rb  
2 Não há nenhum método chamado qualquer_coisa aqui.  
3 >Exit code: 0  

Você também é responsável por manter a assinatura do method_missing. É possível escrever um gancho que captura apenas o nome de um método ausente enquanto ignora seus argumentos e o bloco associado.

Logo do Guru-SP

Este material tem como base o tutorial do RubyLearning.com de Satish Talim e foi traduzido por membros do GURU-SP com a permissão do autor.

Ajude o RubyLearning participando em algum dos cursos pagos ou fazendo uma doação para o projeto

Voltar para o índice