English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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
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.
#!/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:
#!/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.
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:
require filename
Aqui, o nome da extensão do arquivo .rb não é necessário.
$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.
Você pode incluir módulos na classe. Para incluir módulos na classe, você pode usar include instrução:
include modulename
Se o módulo for definido em um arquivo separado, é necessário usar require instrução para referenciar o arquivo.
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:
#!/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
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:
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 .