Minha pergunta é semelhante a " Qual é a diferença entre incluir e estender no Ruby? ".
Qual é a diferença entre require
e include
no Ruby? Se eu apenas quiser usar os métodos de um módulo na minha classe, devo require
ou include
não?
Minha pergunta é semelhante a " Qual é a diferença entre incluir e estender no Ruby? ".
Qual é a diferença entre require
e include
no Ruby? Se eu apenas quiser usar os métodos de um módulo na minha classe, devo require
ou include
não?
require
einclude
, e também relevanteModule#append_features
,.Respostas:
Fonte
Portanto, se você quiser apenas usar um módulo, em vez de estendê-lo ou fazer um mix-in, será melhor usar
require
.Curiosamente, Ruby
require
é análogo ao C deinclude
, enquanto Rubyinclude
é quase nada como C doinclude
.fonte
include
em Ruby é simplesmente herança.class C; include M end
fazM
a superclasseC
e a (antiga) superclasse daC
superclasse deM
. Não acho que Cinclude
funcione por herança, acho que é uma simples substituição textual / lexical.Se você estiver usando um módulo, isso significa que você está trazendo todos os métodos para sua classe. Se você é
extend
uma classe com um módulo, isso significa que você está "trazendo" os métodos do módulo como métodos de classe . Se você teminclude
uma classe com um módulo, isso significa que você está "trazendo" os métodos do módulo como métodos de instância .EX:
B.say
=> método indefinido 'say' para B: ClassB.new.say
=> este é o módulo AC.say
=> este é o módulo AC.new.say
=> método indefinido 'say' para C: Classfonte
require
einclude
são.No livro Metaprogramming Ruby,
fonte
Ruby
require
é mais parecido com "include" em outros idiomas (como C). Diz ao Ruby que você deseja trazer o conteúdo de outro arquivo . Mecanismos semelhantes em outros idiomas são:using <namespace>
diretiva em C # .import <package>
em Java .Ruby
include
é um mecanismo de herança orientado a objetos usado para mixins .Há uma boa explicação aqui :
Enfase adicionada.
fonte
Você já tentou
require
um módulo? Quais foram os resultados? Apenas tente:Módulos não podem ser necessários, apenas incluídos!
fonte
TypeError
) se a palavraModule
for alterada paraClass
.De programação Ruby 1.9
fonte
Incluir Quando você inclui um módulo em sua classe, como mostrado abaixo, é como se você pegasse o código definido no módulo e o inserisse na classe, onde você o inclui. Permite o comportamento 'mixin'. É usado para secar seu código para evitar duplicação, por exemplo, se houver várias classes que precisem do mesmo código dentro do módulo.
Carregar O método load é quase como o método require, exceto que não controla se a biblioteca foi carregada ou não. Portanto, é possível carregar uma biblioteca várias vezes e também ao usar o método de carregamento, você deve especificar a extensão “.rb” do nome do arquivo da biblioteca.
Exigir O método require permite carregar uma biblioteca e impede que ela seja carregada mais de uma vez. O método require retornará 'false' se você tentar carregar a mesma biblioteca após a primeira vez. O método require só precisa ser usado se a biblioteca que você está carregando estiver definida em um arquivo separado, o que geralmente é o caso.
Você pode preferir isso http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/
fonte
Abaixo estão algumas diferenças básicas entre exigir e incluir:
Exigir:
Incluir:
fonte
Ele retornará bolean verdadeiro / falso
O nome que é passado como parâmetro para o require, ruby tentará encontrar o arquivo de origem com esse nome no caminho de carregamento. O método require retornará 'false' se você tentar carregar a mesma biblioteca após a primeira vez. O método require só precisa ser usado se a biblioteca que você está carregando estiver definida em um arquivo separado. Portanto, ele controla se essa biblioteca já foi carregada ou não.
Suponha que você tenha alguns métodos que precisa ter em duas classes diferentes. Então você não precisa escrevê-los nas duas classes. Em vez disso, o que você pode fazer é defini-lo no módulo. E depois inclua este módulo em outras classes. É fornecido pelo Ruby apenas para garantir o princípio DRY. É usado para secar seu código para evitar duplicação
fonte
Incluir
Exigir
Portanto, ele controla se essa biblioteca já foi carregada ou não. Você também não precisa especificar a extensão ".rb" do nome do arquivo da biblioteca. Aqui está um exemplo de como usar o require. Coloque o método require no topo do seu arquivo “.rb”:
Carga
Ampliar
fonte
'Load' - insere o conteúdo de um arquivo. (Analise o arquivo toda vez que o arquivo estiver sendo chamado)
'Exigir' - insere um conteúdo analisado pelo arquivo (arquivo analisado uma vez e armazenado na memória)
'Include' - inclui o módulo na classe e pode usar métodos dentro do módulo como método de instância da classe
'Estender' - inclui o módulo na classe e pode usar métodos dentro do módulo como método de classe
fonte