Quelle est la différence entre inclure et exiger dans une marionnette

8

J'ai une classe en marionnette si j'ai le code suivant:

class A {
  require B

....
} 

J'obtiens une erreur de dépendances circulaires. Si j'ai:

class A {
  include B

....
} 

tout fonctionne bien

talg
la source

Réponses:

18

Ce sont des choses très différentes, en fait. Dire que les require Bmoyens Bdoivent venir avant A(et, par conséquent, peuvent conduire à des dépendances circulaires si quelque chose Bse révèle require A). Et s'il Bn'est pas inclus du tout, cela entraînera une erreur de dépendances manquante.

D'un autre côté, include Bdit simplement Bsera appliqué chaque fois qu'il Aest appliqué: il ne dit rien de l'ordre entre eux.

Daniel C. Sobral
la source
Cela ne require Bsignifie- t-il pas que cela Bdoit venir avant A?
Sebastian Krysmanski
@SebastianKrysmanski Euh, oui. :)
Daniel C.Sobral
10

Cela vient d'être demandé (et répondu) sur la liste de diffusion de marionnettes:

La différence est évidente lorsque le catalogue doit être appliqué. Avec l'inclusion, vous avez évalué son contenu au moment de l'inclusion - mais toutes les ressources doivent dépendre explicitement après l'inclusion. Avec un besoin - la dépendance est créée pour vous - mais vous devez être prudent et vous assurer que c'est le résultat souhaité

- Ken Barber dans Exiger vs inclure?

larsks
la source