English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Módulo Ruby (Module)

O módulo (Module) é uma maneira de combinar métodos, classes e constantes. O módulo (Module) oferece dois grandes benefícios.

  • O módulo fornece umespaço de nomese evita conflitos de nomes.

  • O módulo realiza mixin dispositivo.

O módulo (Module) define um espaço de nomes, equivalente a uma caixa de areia, onde seus métodos e constantes não conflitam com outros métodos e constantes em outros lugares.

O módulo é semelhante ao classe, mas há algumas diferenças:

  • O módulo não pode ser instanciado

  • O módulo não tem subclasses

  • O módulo pode ser definido apenas por outro módulo

sintaxe

module Identifier
   statement1
   statement2
   ...........
fim

Os nomes de constante de módulo são semelhantes aos nomes de constante de classe, começando com letras maiúsculas. A definição de método parece também: a definição de método de módulo é semelhante à definição de método de classe.

Pode chamar métodos de módulo colocando o nome do módulo e um ponto antes do nome do método, e usar dois dois-pontos para referenciar uma constante. Você pode usar o nome do módulo e dois dois-pontos para referenciar uma constante.

Exemplo Online

#!/usr/bin/ruby
 
# Módulo definido no arquivo trig.rb
 
module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   fim
   def Trig.cos(x)
   # ..
   fim
fim

Podemos definir múltiplos módulos com nomes de função idênticos mas funcionalidades diferentes:

Exemplo Online

#!/usr/bin/ruby
 
# Módulo definido no arquivo moral.rb
 
module Moral
   VERY_BAD = 0
   BAD = 1
   def Moral.sin(badness)
   # ...
   fim
fim

como métodos de classe, quando você define um método em um módulo, você pode especificar um ponto após o nome do módulo, seguido do nome do método.

Ruby require instrução

instrução require semelhante ao C e C++ as instruções include dentro de Java e import. Se um programa de terceiro quiser usar qualquer módulo definido, pode simplesmente usar Ruby require instrução para carregar o arquivo do módulo:

sintaxe

sintaxe

require filename

Aqui, o nome da extensão do arquivo .rb não é necessário.

Exemplo Online

$LOAD_PATH << '.'
 
require 'trig.rb'
require 'moral'
 
y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)

Aqui, usamos $LOAD_PATH << '.' Faça o Ruby saber que deve procurar arquivos citados no diretório atual. Se você não quiser usar $LOAD_PATH, você pode usar require_relative para referenciar arquivos a partir de um diretório relativo.

Nota:Aqui, o arquivo contém nomes de função idênticos. Portanto, isso causará confusão na chamada de código de referência, mas os módulos evitam essa confusão e podemos chamar a função apropriada usando o nome do módulo.

Ruby include instrução

Você pode incluir módulos na classe. Para incluir módulos na classe, você pode usar include instrução:

sintaxe

include modulename

Se o módulo for definido em um arquivo separado, é necessário usar require instrução para referenciar o arquivo.

Exemplo Online

Supondo que o módulo abaixo seja escrito support.rb no arquivo.

module Week
   FIRST_DAY = "Domingo"
   def Week.weeks_in_month
      puts "Você tem quatro semanas em um mês"
   fim
   def Week.weeks_in_year
      puts "Você tem 52 semanas em um ano"
   fim
fim

Agora, você pode referenciar o módulo na classe, conforme mostrado a seguir:

Exemplo Online

#!/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
   fim
fim
d1=Decade.new
puts Week::FIRST_DAY
Week.weeks_in_month
Week.weeks_in_year
d1.no_of_months

Isso produzirá o seguinte resultado:

Domingo
Você tem quatro semanas em um mês
Você tem 52 semanas em um ano
Domingo
120

Mixins no Ruby

Antes de ler essa seção, você precisa ter uma compreensão inicial do conceito de orientação a objetos.

Quando uma classe pode herdar características de várias classes pais, essa classe é chamada de herança múltipla.

Ruby não suporta diretamente a herança múltipla, mas o módulo (Module) do Ruby tem outra função mágica. Ele quase elimina a necessidade de herança múltipla, oferecendo uma funcionalidade chamada mixin do dispositivo.

Ruby não implementou realmente o mecanismo de herança múltipla, mas adotou a técnica de mixin como substituto. Incluir o módulo na definição da classe, e os métodos do módulo são misturados na classe.

Vamos ver o exemplo de código a seguir para entender melhor mixin:

Exemplo Online

módulo A
   def a1
   fim
   def a2
   fim
fim
módulo B
   def b1
   fim
   def b2
   fim
fim
 
class Sample
include A
include B
   def s1
   fim
fim
 
samp=Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1
  • O módulo A é composto pelo método a1 e a2 Composição.

  • O módulo B é composto pelos métodos b1 e b2 Composição.

  • A classe Sample contém os módulos A e B.

  • A classe Sample pode acessar todos os quatro métodos, ou seja, a1、a2、b1 e b2.

Portanto, você pode ver que a classe Sample herdou dois módulos, você pode dizer que a classe Sample usa herança múltipla ou mixin .