Latest web development tutorials

módulo Ruby (Module)

Module (Módulo) é uma forma de métodos, classes, e constantes combinadas maneira. Module (Módulo) oferece dois benefícios.

  • Módulos fornecem umespaçodenomese evitar conflitos de nome.
  • Módulo implementa dispositivosmixin.

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:

  • Módulos não pode ser instanciado
  • Módulo há subclasses
  • Módulo só pode ser definido por um outro módulo

gramática

module Identifier
   statement1
   statement2
   ...........
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.

Exemplos

#!/usr/bin/ruby

# 定义在 trig.rb 文件中的模块

module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   end
   def Trig.cos(x)
   # ..
   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)
   # ...
   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.

Rubiexigem declaração

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:

gramática

require filename

Aqui, a extensão do arquivo não.RB necessário.

Exemplos

$ 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.

Rubiinclude

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:

gramática

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.

Exemplos

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

Ruby no Mixins

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
  • Um módulo é composto pelo processo de A1 e A2.
  • Módulo B pelo método de composição B1 e B2.
  • classe de exemplo contém módulos A e B.
  • classe de exemplo pode acessar todos os quatro métodos, ou seja, A1, A2, B1 e B2.
  • Assim você pode ver que a classe Sample herda dois módulos, você pode dizer a classe Sample usar herança múltipla oumixin.