O melhor tutorial módulo Ruby (Module) em 2024. Neste tutorial você pode aprender Rubiexigem declaração,Rubiinclude,Ruby no Mixins,
Module (Módulo) é uma forma de métodos, classes, e constantes combinadas maneira. Module (Módulo) oferece dois benefícios.
Module (Módulo) define um espaço de nomes, o equivalente a uma caixa de areia, seus métodos e constantes não são constantes e métodos de conflitos em-lo.
Módulo de classe semelhante, mas com um olhar diferente:
module Identifier statement1 statement2 ptptptptpt. end
Módulo nomeado constantes e constantes da classe de nome semelhante, começando com uma letra maiúscula. definição de método se parece com: abordagem modular semelhante ao definir as definições de métodos de classe.
Através dos métodos de classe, você pode colocar o nome do módulo e um ponto na frente do nome da classe do método para chamar a abordagem modular, você pode usar o nome do módulo e dois dois pontos para fazer referência a uma constante.
#!/usr/bin/ruby # 定义在 trig.rb 文件中的模块 module Trig PI = 3.141592654 def Trig.sin(x) # pt end def Trig.cos(x) # pt end end
Podemos definir várias funções com o mesmo nome mas diferentes módulos funcionais:
#!/usr/bin/ruby # 定义在 moral.rb 文件中的模块 module Moral VERY_BAD = 0 BAD = 1 def Moral.sin(badness) # pt. end end
Como métodos de classe, quando você definir um método em um módulo, você pode especificar o nome do módulo seguido por um ponto após ponto seguido pelo nome do método.
exigem declaração é semelhante ao C e C ++, e incluem declarações na declaração de importação Java. Se um programa de terceiros que você deseja usar qualquer um dos módulos foram definidos, você pode simplesmente usar orubiexigem declaração para carregar o arquivo de módulo:
require filename
Aqui, a extensão do arquivo não.RB necessário.
$ LOAD_PATH << '.' require 'trig.rb' require 'moral' y = Trig.sin (Trig :: PI / 4) irregularidades = Moral.sin (Moral :: VERY_BAD)
Aqui, usamos$ LOAD_PATH << '.' Vamos Rubi sabemos que temos de procurar o arquivo referenciado no diretório atual.Se você não quiser usar $ LOAD_PATH, você pode usarrequire_relative para fazer referência a um arquivo de um diretório relativo.
Nota: Aqui, o arquivo contém o mesmo nome da função.Então, isso vai levar a ofuscação quando se refere ao programa de chamada, mas módulos evitar este ofuscação de código, e podemos usar o nome do módulo para chamar a função apropriada.
Você pode incorporar um módulo em uma classe. A fim de inserir no módulo de classe, você pode usarincluemdeclarações em sua classe:
include modulename
Se o módulo é definido em um arquivo separado, por isso antes que você precisa para usar o módulo embutidorequirereferência ao arquivo.
Assumindo os seguintes módulos escritos em arquivosupport.rb.
module Week FIRST_DAY = "Sunday" def Week.weeks_in_month puts "You have four weeks in a month" end def Week.weeks_in_year puts "You have 52 weeks in a year" end end
Agora você pode referenciar o módulo na classe, como segue:
#!/usr/bin/ruby $LOAD_PATH << '.' require "support" class Decade include Week no_of_yrs=10 def no_of_months puts Week::FIRST_DAY number=10*12 puts number end end d1=Decade.new puts Week::FIRST_DAY Week.weeks_in_month Week.weeks_in_year d1.no_of_months
Isto produz os seguintes resultados:
Sunday You have four weeks in a month You have 52 weeks in a year Sunday 120
Antes de ler esta seção, você vai precisar de um entendimento preliminar dos conceitos de orientação a objetos.
Quando uma classe pode ser mais do que uma classe pai quando a classe recurso herda, a classe é exibido como herança múltipla.
Ruby não suporta diretamente a herança múltipla, mas módulo do Ruby (Module) tem outras características fantásticas. Ele elimina virtualmente a necessidade de herança múltipla, é proporcionado um aparelho chamadoum mixin.
Ruby não realmente atingir mecanismo de herança múltipla, mas adotado como tecnologia mixin como um substituto. Os módulos incluem a definição de classe, a abordagem módulo para misturar na classe.
Vamos olhar para o código de exemplo seguinte, a compreensão em profundidade de mixin:
module A def a1 end def a2 end end module B def b1 end def b2 end end class Sample include A include B def s1 end end samp=Sample.new samp.a1 samp.a2 samp.b1 samp.b2 samp.s1