Novidade: Metaperguntas agora no próprio Umamão

1

Ambos parecem ser um função de retorno para executar alguma ação quando o módulo é incluído em uma classe ou outro módulo, como em:

module Bar
  def self.included(base) # base vai ser a classe Foo neste exemplo
    puts "#{self} foi incluído em #{base}"
  end
end

class Foo
  include Bar
end
# Imprime "Bar foi incluído em Foo"

Que parece ser equivalente a:

module Bar
  def self.append_features(base) # base vai ser a classe Foo neste exemplo
    puts "#{self} foi incluído em #{base}"
  end
end

class Foo
  include Bar
end
# Imprime "Bar foi incluído em Foo"

Os dois métodos não são alias um do outro, então qual é a diferença?

flag

1 Answer

2

Em primeiro lugar, o included é a opção recomendada.

Mas por que isso?

As duas funções são chamadas quando você inclui o módulo Bar, mas o append_features é a função que adiciona os métodos, variáveis, etc. Então, o que você fez nesse segundo exemplo redefiniria essa função e você não teria acesso aos outros métodos do módulo Bar em Foo. Já o método included não faz nada a princípio, aí você pode redefini-lo como quiser sem quebrar nada.

Um exemplo mais ou menos claro do que eu disse.

link|flag

Your Answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.