Мой вопрос похож на «В чем разница между включением и расширением в Ruby? ».
Какая разница между require
и include
в Ruby? Если я просто хочу использовать методы из модуля в моем классе, я должен require
это или include
нет?
Мой вопрос похож на «В чем разница между включением и расширением в Ruby? ».
Какая разница между require
и include
в Ruby? Если я просто хочу использовать методы из модуля в моем классе, я должен require
это или include
нет?
require
иinclude
, а также соответствующих,Module#append_features
.Ответы:
Источник
Так что, если вы просто хотите использовать модуль, а не расширять его или делать встраивание, тогда вы захотите его использовать
require
.Как ни странно, Руби
require
аналогична Кассиопеянеinclude
, в то время как Рубиinclude
почти ничего , как Кассиопеянеinclude
.источник
include
в Ruby это просто наследование.class C; include M end
делаетM
суперклассC
и (бывший) суперклассC
суперклассаM
. Я не думаю, что Сиinclude
работает через наследование, я думаю, что это простая текстовая / лексическая замена.Если вы используете модуль, это означает, что вы вводите все методы в свой класс. Если у вас
extend
класс с модулем, это означает, что вы «вводите» методы модуля как методы класса . Если у васinclude
класс с модулем, это означает, что вы «вводите» методы модуля в качестве методов экземпляра .EX:
B.say
=> неопределенный метод 'say' для B: ClassB.new.say
=> это модуль АC.say
=> это модуль АC.new.say
=> неопределенный метод 'say' для C: Classисточник
require
иinclude
.Из книги Метапрограммирования Ruby,
источник
Ruby
require
больше похож на «include» в других языках (таких как C). Он сообщает Ruby, что вы хотите добавить содержимое другого файла . Подобные механизмы на других языках:using <namespace>
директива в C # .import <package>
на Яве .Ruby
include
- это объектно-ориентированный механизм наследования, используемый для миксинов .Существует хорошее объяснение здесь :
Акцент добавлен.
источник
Вы когда-нибудь пробовали
require
модуль? Каковы были результаты? Просто попробуй:Модули не могут быть необходимы, только включены!
источник
TypeError
), если словоModule
будет изменено наClass
.Из программирования Ruby 1.9
источник
Включить Когда вы включаете модуль в свой класс, как показано ниже, это выглядит так, как будто вы взяли код, определенный в модуле, и вставили его в класс, куда вы его «включили». Это позволяет «смешивать» поведение. Он используется для СУШКИ вашего кода, чтобы избежать дублирования, например, если было несколько классов, для которых в модуле требовался бы один и тот же код.
Load Метод load похож на метод require, за исключением того, что он не отслеживает, была ли загружена эта библиотека. Таким образом, можно загружать библиотеку несколько раз, а также при использовании метода load необходимо указать расширение имени файла библиотеки «.rb».
Require Метод require позволяет загружать библиотеку и предотвращает ее загрузку более одного раза. Метод require вернет false, если вы попытаетесь загрузить ту же библиотеку после первого раза. Метод require требуется использовать только в том случае, если загружаемая библиотека определена в отдельном файле, что обычно имеет место.
Вы можете предпочесть это http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/
источник
Ниже приведены несколько основных различий между require и include:
Требуется:
Включают:
источник
Он вернет булево значение true / false
Имя, которое передается в качестве параметра для require, ruby попытается найти исходный файл с этим именем в вашем пути загрузки. Метод require вернет false, если вы попытаетесь загрузить ту же библиотеку после первого раза. Метод require требуется использовать только в том случае, если загружаемая библиотека определена в отдельном файле. Таким образом, он отслеживает, была ли эта библиотека уже загружена или нет.
Предположим, если у вас есть несколько методов, которые вам нужны в двух разных классах. Тогда вам не нужно писать их в обоих классах. Вместо этого вы можете определить это в модуле. А затем включить этот модуль в другие классы. Он предоставляется Ruby только для обеспечения принципа СУХОЙ. Он используется, чтобы высушить ваш код, чтобы избежать дублирования
источник
Включают
требовать
Таким образом, он отслеживает, была ли эта библиотека уже загружена или нет. Вам также не нужно указывать расширение «.rb» имени файла библиотеки. Вот пример того, как использовать require. Поместите метод require в самый верх файла «.rb»:
нагрузка
простираться
источник
'Load' - вставляет содержимое файла. (Разбор файла каждый раз, когда файл вызывается)
'Require' - вставляет проанализированный файл (файл анализируется один раз и сохраняется в памяти)
«Включить» - включает модуль в класс и может использовать методы внутри модуля в качестве метода экземпляра класса.
Extend - включает модуль в класс и может использовать методы внутри модуля как метод класса
источник