Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Verificando o padrão no nome do método

Boa tarde, pessoal !

def method_missing(name)
 matcher =name.to_s.match(.+)_que_mais_vendeu_por(.+)"

if matcher
  tipo = matcher[1] 
 campo = matcher[2].to_sym #pois precisamos converter   para simbolo 
 que_mais_vendeu_por(tipo, &campo) 
else 
 super 
 end
end

Não consegui compreender esse trecho de código do curso de orientação de objetos :

Alguém conseguiria explicar de forma mais detalhada o comportamento desse método ?

grato!

3 respostas

Segue código, agora, devidamente formatado

def method_missing(name)
 matcher =name.to_s.match(.+)_que_mais_vendeu_por(.+)

if matcher
  tipo = matcher[1] 
 campo = matcher[2].to_sym #pois precisamos converter   para simbolo 
 que_mais_vendeu_por(tipo, &campo) 
else 
 super 
 end
end
solução!

Oi José, essa é uma das belezas(existem pessoas que não gostam) do Ruby. É uma linguagem que te da muita liberdade, mas nem sempre isso é fácil...

Você pode criar na sua classe um método chamado method_missing que sempre vai ser chamado quando algum método inexistente for invocado. Abaixo segue um trecho de código tentando exemplificar:

class Pessoa

def method_missing(nome, *args) 
   puts "metodo #{nome} foi invocado"
end

end

p = Pessoa.new
p.devolve_nome

`

O método devolve_nome não existe, então quando ele for invocado a chamada vai cair no method_missing. Muito da mágica do framework Rails, que é escrito em Ruby, vem disso aí. O código dentro do method_missing é só para verificar o padrão de nome do método que está sendo invocado. Ela pega o que vier antes e depois do _que_mais_vendeu_por e repassa para o método correto.

Vlw, Alberto, pela atenção :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software