2011-03-24 20 views
17

Tengo un módulo ruby ​​para constantes. Tiene una lista de variables y 1 método que aplica formato. Parece que no puedo acceder al método en este módulo. ¿Alguna idea de por qué?Ruby Module Método de acceso

+9

¿Puedes publicar el código? –

Respuesta

51

Si el módulo include el método se convierte en un método ejemplo pero si extend el módulo entonces se convierte en un método clase.

module Const 
    def format 
    puts 'Done!' 
    end 
end 

class Car 
    include Const 
end 

Car.new.format # Done! 
Car.format # NoMethodError: undefined method format for Car:Class 

class Bus 
    extend Const 
end 

Bus.format # Done! 
Bus.new.format # NoMethodError: undefined method format 
+1

Esto fue realmente útil. Gracias :) – Rads

0

general, con módulos, estas cosas deben estar sucediendo:

- ruta> Carga automática en application.rb, agregue la línea:

config.autoload_paths += %W(#{config.root}/lib) 

-> Módulo lugar en/lib

-> Incluir módulo con 'incluir NAMEOFMODULE'

(si el módulo tiene un guión bajo como game_engine, necesitas 'incluir GameEngine')

+0

no puedo acceder al método dentro del mismo módulo: –

+0

algo así como este módulo Constantes # Para cambiar esta plantilla use Archivo | Configuración | Plantillas de archivo. def remove_formatting (original) convertido = original.replace (original.gsub! (/ \ W + /, '')) retorno convierte final Name = "Este es un nombre" final –

25
module Foo 
    def self.hello # This is a class method 
    puts "self.hello" 
    end 

    def hello # When you include this module, it becomes an instance method 
    puts "hello" 
    end 
end 

Foo.hello #=> self.hello 

class Bar 
    include Foo 
end 

Bar.new.hello #=> hello 
+1

lo que si ¿Tienes algún otro método en Foo y quieres acceder a hello dentro de ese método? ¿Como lo harias? –

+0

No lo entiendo puedes simplemente llamar 'hola' dentro de ese método. – GutenYe

+0

Respuesta simple pero completa. – Hito