Назад | Перейти на главную страницу

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

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

class A {
  require B

....
} 

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

class A {
  include B

....
} 

все работает нормально

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

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

Об этом только что спросили (и ответили) в списке рассылки марионеток:

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

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