Какая разница между включить и требовать в марионетке

8

У меня есть класс в кукольный, если у меня есть следующий код:

class A {
  require B

....
} 

Я получаю ошибку циклических зависимостей. Если у меня есть:

class A {
  include B

....
} 

все отлично работает

talg
источник

Ответы:

18

На самом деле это очень разные вещи. Сказать, что require Bсредства Bдолжны прийти раньше A(и, следовательно, может привести к круговым зависимостям, если что-то Bокажется require A). А если Bне включить вообще, это приведет к ошибке отсутствующих зависимостей.

С другой стороны, include Bпросто говорит, Bчто будет применяться всякий раз, когда Aприменяется: он ничего не говорит о порядке между ними.

Даниэль С. Собрал
источник
Разве это не require Bзначит, что это Bдолжно произойти раньше A?
Себастьян Крысманский
@SebastianKrysmanski О, да. :)
Даниэль С. Собрал
10

Это просто спросили (и ответили) в списке рассылки марионеток:

Разница очевидна, когда каталог должен быть применен. С помощью include вы оценили его содержимое во время включения - но любые ресурсы должны явно зависеть после включения. С требованием - зависимость создана для вас - но вы должны быть осторожны и убедиться, что это ваш желаемый результат

- Кен Барбер в Требовать против Включить?

larsks
источник