2009-05-16 8 views
6

Tengo un módulo Shish (que actúa como una clase abstracta) y una clase de visitante Only_Onions.Constante no inicializada MyClass (NameError) en Ruby

Quiero crear una instancia de Only_Onions en el módulo Shish para que todas las clases que se extienden Shish puedan usar el objeto para determinar si tienen solo ions.

module Shish 
    only_onions_class = Only_Onions.new 
end 

class Only_Onions 
    def for_skewer 
     return true 
    end 
end 


class Skewer 
    include Shish 

    def only_onions 
     return only_onions_class.for_skewer 
    end 

    def veg? 
     return true 
    end 
end 

Pero me da un error "Shish constante sin inicializar :: Only_Onions (NameError). ¿Qué significa eso?

Respuesta

6

El orden de la declaración tiene un efecto. Doesn Shish No sé sobre Only_Onions en su código. Si lo cambia a esto, entonces Only_Onions ya está declarado cuando defina el módulo Shish:

class Only_Onions 
    def for_skewer 
     return true 
    end 
end 

module Shish 
    only_onions_class = Only_Onions.new 
end 

class Skewer 
    include Shish 

    def only_onions 
     return only_onions_class.for_skewer 
    end 

    def veg? 
     return true 
    end 
end 
+0

Esto resolvió el problema original. Pero creo que only_onions_class necesita ser una variable de clase. ¿Estoy en lo correcto? ¿Puedo hacer que el código anterior funcione correctamente? – unj2

1

tratar

::Only_Onions 
+1

Pensé que :: es solo cuando tienes un nombre de módulo antes y un nombre de clase después de él para designar un espacio de nombres? ¿Qué hace cuando lo usas sin un módulo frente a él? No estoy familiarizado con esto. –

+1

Un espacio de nombre en blanco indica el espacio de nombre global. Entonces Object es tanto "Object" como ":: Object". – Chuck

Cuestiones relacionadas