В чем разница между include и require в Ruby?
мой вопрос похож на "в чем разница между include и extend в Ruby?".
В чем разница между require и include в Ruby? Если я просто хочу использовать методы из модуля в моем классе, я должен require или include это?
10 ответов:
в чем разница между "включить" и "потребовать" в Ruby?
ответ:
включают и требуют методы делают очень разные вещи.
метод require делает то, что включает в большинстве других программ языки: запустите другой файл. Это также отслеживает то, что вам требуется в прошлое и не потребует того же файла дважды. Чтобы запустить другой файл без это добавлено функциональность, вы можете использовать метод Load.
метод include принимает все методы из другого модуля и включает их в текущий модуль. Это вещь на уровне языка, как в отличие от вещи на уровне файлов, как с требовать. Включить способ основной способ "расширить" классы с помощью другие модули (обычно называемые mix-ins). Например, если ваш класс определяет метод "каждый", вы можете включает модуль подмешать перечисли и он может действовать в виде коллекции. Этот может быть запутанным, как включить глагол используется очень по-разному в других языки.
так что если вы просто хотите использовать модуль, а не расширять его или делать микширование, то вы хотите использовать
require.как ни странно, Руби
requireаналогично Cinclude, в то время как Рубиincludeпочти ничего похожего на Cinclude.
из Метапрограммной рубиновой книги,
The
require()метод очень похож наload(), но он предназначен для различная цель. Вы используетеload()для выполнения кода, и вы используетеrequire()импортировать библиотеки.
если вы используете модуль, это означает, что вы приносите все методы в свой класс. Если вы
extendкласс с модулем, это означает, что вы" вводите " методы модуля как класс методы. Если выincludeкласс с модулем, это означает, что вы" вводите " методы модуля как экземпляр методы.EX:
module A def say puts "this is module A" end end class B include A end class C extend A end
B.say= > неопределенный метод ' say ' для B: Class
B.new.say=> вот модуль
C.say=> это модуль
C.new.say= > неопределенный метод ' say ' для C: Class
вы когда-нибудь пытались
requireмодуль? Каковы были результаты? Просто попробуйте:MyModule = Module.new require MyModule # see what happensмодули не могут быть обязательными, только включены!
с Программирование Ruby 1.9
прежде чем мы продолжим, мы сделаем несколько замечаний о заявлении include. Во-первых, он имеет ничего общего с файлами. Программисты C используют директиву препроцессора #include to вставить содержимое одного файла в другой во время компиляции. Рубин включать заявление просто делает ссылку на модуль. Если этот модуль находится в отдельном файле, необходимо использовать требуйте (или его менее часто используемый кузен, нагрузка), чтобы перетащите этот файл перед использованием include. Во-вторых, Ruby include не просто копирует методы экземпляра модуля в класс. Вместо этого он делает ссылку из класса на включенный модуль. Если несколько классов включите этот модуль, они все будут указывать на одно и то же. Если вы измените определение метод в модуле, даже когда ваша программа запущена, все классы, которые включают это модуль покажет новое поведение.
включить Когда вы включаете модуль в свой класс, как показано ниже, это как если бы вы взяли код, определенный в модуле, и вставили его в класс, где вы "включаете" его. Это позволяет "смешивать" поведение. Он используется для высушивания кода, чтобы избежать дублирования, например, если в модуле было несколько классов, которым нужен один и тот же код.
загрузить Метод load почти похож на метод require, за исключением того, что он не отслеживает, является ли эта библиотека был загружен. Таким образом, можно загрузить библиотеку несколько раз, а также при использовании метода load необходимо указать "."расширение имени файла библиотеки РБ.
требуются Метод require позволяет загружать библиотеку и предотвращает ее загрузку более одного раза. Метод require вернет 'false', если вы попытаетесь загрузить ту же библиотеку после первого раза. Метод require должен использоваться только в том случае, если загружаемая библиотека определена в отдельном файле, который является обычно так и бывает.
вы можете предпочесть это http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/
require(name)он вернет bolean true / false
имя, которое передается в качестве параметра в require, ruby попытается найти исходный файл с этим именем в вашем пути загрузки. Метод require вернет 'false', если вы попытаетесь загрузить ту же библиотеку после первого раза. Метод require должен использоваться только в том случае, если загружаемая библиотека определена в отдельном файле. Таким образом, он отслеживает, была ли эта библиотека уже загружена или нет.
include module_nameпредположим, если у вас есть некоторые методы, которые вы должны иметь в двух разных классах. Тогда вам не нужно писать их в обоих классах. Вместо того, что вы можете сделать, это определить его в модуль. А затем включить этот модуль в другие классы. Оно обеспечен Рубином как раз для того чтобы обеспечить сухой принцип. Он используется, чтобы высушить ваш код, чтобы избежать дублирования
включить
когда вы
includeмодуль в вашем классе, это как если бы вы взяли код, определенный в модуле и вставленный в класс, где вы "включить" его. Это позволяет "смешивать" поведение. Он используется, чтобы высохнуть ваш код, чтобы избежать дублирования, например, если их было несколько классы, которые будут нуждаться в том же коде в модуле.module Log def class_type "This class is of type: #{self.class}" end end class TestClass include Log # ... end tc = TestClass.new.class_type # -> success tc = TestClass.class_type # -> errorтребуются
В метод require позволяет загружать библиотеку и предотвращает ее загружается более одного раза. Метод require вернет 'false', если вы пытаетесь загрузить ту же библиотеку после первого раза. Требуется метод должен использоваться только в том случае, если библиотека, которую вы загружаете, определена в отдельный файл, что обычно и происходит.
таким образом, он отслеживает, была ли эта библиотека уже загружена или нет. Вам также не нужно указывать ".rb " расширение файла библиотеки имя. Вот пример того, как использовать require. Поместите метод require в самом верху вашего ".файл" РБ:
загрузить
метод загрузки почти как метод require за исключением того, что он не делает следите за тем, была ли загружена эта библиотека. Так что это возможность загрузки библиотеки несколько раз, а также при использовании нагрузки метод необходимо указать ".rb " расширение файла библиотеки имя.
расширения
при использовании метода extend вместо include, вы добавляете методы модуля как методы класса, а не как методы экземпляра.
module Log def class_type "This class is of type: #{self.class}" end end class TestClass extend Log # ... end tc = TestClass.class_type
Ниже приведены несколько основных различий между require и include:
требуется:
- Require считывает файл из файловой системы, анализирует его, сохраняет в память и запускает его в заданном месте, что означает, что если вы даже измените что-либо во время работы скрипта, то это изменение не отразится.
- нам требуется файл по имени, а не по имени модуля.
- Он обычно используется для библиотек и увеличение.
включает:
- когда вы включаете модуль в свой класс, он ведет себя так, как если бы вы взяли код, определенный в модуле и вставил его в свой класс.
- мы включаем имя модуля, а не имя файла.
- он обычно используется, чтобы высушить код и удалить дублирование в коде.
Comments