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.
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