Modules: prepend vs include
O curso mostra como o Ruby decide qual corpo de método roda quando uma classe e um módulo definem o mesmo nome. Com .ancestors, fica claro que include põe o módulo depois da classe e prepend põe antes. As aulas fazem traces com puts, seguem o super um passo pela cadeia, juntam as duas palavras-chave numa classe e explicam o NoMethodError quando o super não encontra nada. A última aula compara quando usar cada uma, inclusive para embrulhar um método sem editar a classe.
O que você vai aprender
- ✓Como .ancestors define a ordem de busca de métodos no Ruby
- ✓Onde include e prepend colocam o módulo em relação à classe
- ✓Traces com puts para ver quais corpos de método rodam
- ✓Como o super anda um passo em .ancestors
- ✓Include e prepend juntos na mesma classe
- ✓Quando usar include para comportamento compartilhado e prepend para embrulhar um método
Recap: include e a cadeia de ancestrais
Em Módulos Ruby você escreveu include SomeModule dentro do corpo de uma classe para misturar os métodos de um módulo em toda instância da classe. Este curso não ensina isso de novo. Ele responde a uma pergunta mais precisa, que o curso anterior só tocou. Quando o Ruby procura um método, em que…
Ler a aula completa grátis →Currículo
7 aulasRecap: include e a cadeia de ancestrais
Relembra que include põe o módulo depois da classe, então o método da própria classe vence.
prepend insere um module antes da classe
Mostra que prepend põe o módulo antes da classe, então o método dele roda primeiro e controla a chamada.
Ancestors, lado a lado: include vs prepend
Compara os dois arrays de ancestors e mostra o NoMethodError quando o super de um módulo com prepend não acha nada.
Provando qual método roda primeiro
Usa traces com puts para mostrar que include substitui o método do módulo e prepend embrulha o da classe.
super dentro de um module prependido alcança a classe
Explica que o super dentro de um módulo com prepend anda um passo em .ancestors e chega à classe.
Combinando include e prepend na mesma classe
Aplica include e prepend na mesma classe e segue cada chamada a super pela cadeia resultante.
Juntando tudo: escolhendo include ou prepend
Revisa a regra de posição e compara quando cabe o include e quando o prepend serve para embrulhar métodos.