2009-02-14 25 views
17

¿Cómo se escribe un módulo para ruby? en Python puede utilizarMódulo de escritura para Ruby

# module.py 
def helloworld(name): 
    print "Hello, %s" % name 

# main.py 
import module 
module.helloworld("Jim") 

Volver a la pregunta ¿cómo se crea un módulo en/de rubí

Respuesta

0
module NumberStuff 
    def self.random 
    rand(1000000) 
    end 
end 

module LetterStuff 
    def self.random 
    (rand(26) + 65).chr 
    end 
end 

puts NumberStuff.random 
puts LetterStuff.random 

184783 
X 
+6

Probablemente desee utilizar "def self.random" para evitar problemas cuando cambie el nombre de su módulo. Esta es la práctica común de Ruby. – molf

29

módulos en Ruby tienen propósito diferente al de los módulos en Python . Normalmente, utiliza módulos para definir métodos comunes que podrían incluirse en otra definición de clase.

Pero los módulos en Ruby también podrían usarse de forma similar a Python para agrupar métodos en algún espacio de nombre. Por lo que su ejemplo en Ruby sería (I nombre del módulo como Module1 como módulo es constante estándar de Ruby):

# module1.rb 
module Module1 
    def self.helloworld(name) 
    puts "Hello, #{name}" 
    end 
end 

# main.rb 
require "./module1" 
Module1.helloworld("Jim") 

Pero si se quiere entender los conceptos básicos de Ruby Yo recomendaría empezar con algunos quick guide to Ruby - stackoverflow no es la mejor manera de cómo aprender lo básico de nuevo lenguaje de programación :)

EDITAR
Desde 1.9 la ruta local no está en $ search_path más. Para requrie un archivo de la carpeta local que sea necesario require ./FILE o require_relative FILE

0
# meth.rb 
def rat 
    "rizzo" 
end 

# cla.rb 
class Candy 
    def melt 
    "awwwww...." 
    end 
end 

# main.rb 
require 'meth' 
require 'cla' 
require 'mod' 

puts rat 
puts Candy.new.melt 
puts Hairy.shave 

En Ruby, los módulos son el nombre de construcciones sintácticas utilizadas para métodos de grupo, constantes, clases y otros módulos. Son el equivalente de Ruby de espacios de nombres.

Un concepto separado está agrupando por archivo, como en el ejemplo anterior. A menudo, sin embargo, los dos conceptos coexisten, con un archivo que usa un único módulo como espacio de nombre.

# mod.rb 
module Hairy 
    def self.shave 
    "ouch!" 
    end 
end 
16

La gente ha dado algunos ejemplos agradables aquí, pero usted puede crear y usar módulos de la siguiente manera así (Mixins)

Módulo ser incluido

#instance_methods.rb 
module MyInstanceMethods 
    def foo 
    puts 'instance method foo called' 
    end 
end 

módulo que se extendida

#class_methods.rb 
module MyClassMethods 
    def bar 
    puts 'class method bar called' 
    end 
end 

Incluido métodos módulo actúan como si son métodos de instancia de la clase en la que el módulo está incluido

require 'instance_methods.rb' 

class MyClass 
    include MyInstanceMethods 
end 

my_obj = MyClass.new 
my_obj.foo #prints instance method foo called 
MyClass.foo #Results into error as method is an instance method, _not_ a class method. 

extendidas métodos módulo actúan como si son métodos de clase de la clase en la que el módulo está incluido

require 'class_methods.rb' 

class MyClass 
    extend MyClassMethods 
end 

my_obj = MyClass.new 
my_obj.bar #Results into error as method is a class method, _not_ an instance method. 
MyClass.bar #prints class method bar called 

Incluso puede extender un módulo solo para un objeto específico de la clase.Para ese propósito en lugar de extender el módulo dentro de la clase, haces algo como

my_obj.extend MyClassMethods 

De esta manera, sólo el my_object tendrá acceso a los métodos MyClassMethods módulo y no otras instancias de la clase a la que pertenece mi_objeto. Los módulos son muy muy poderosos. Puedes aprender sobre ellos usando core API documentation

Disculpa si hay errores tontos en el código, no lo probé, pero espero que entiendas la idea.

Cuestiones relacionadas