2009-05-16 6 views
6

모듈 Shish (추상 클래스처럼 동작 함)와 방문자 클래스 Only_Onions가 있습니다.Ruby의 초기화되지 않은 상수 MyClass (NameError)

Shish 모듈을 확장하여 Shish 모듈을 확장하면 Shish를 확장 한 모든 클래스가 해당 함수 만 가지고있는 경우 객체를 사용하여 deteremine을 사용할 수 있습니다.

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 

하지만 난 그게 무슨 뜻 이죠. "초기화되지 않은 상수 시시 :: Only_Onions (나가서 설명하자면 NameError) 오류가?

답변

6
선언의 순서는 영향을

을 시도하십시오. 시시 아무튼 코드에서 Only_Onions에 대해 알지 못한다면 모듈을 정의 할 때 Only_Onions가 이미 선언되었습니다. 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

원래 문제가 해결되었습니다. 그러나 나는 only_onions_class가 클래스 변수 일 필요가 있다고 생각한다. 나 맞아? 위의 코드를 올바르게 작동시킬 수 있습니까? – unj2

1

::Only_Onions 
+1

나는 :: 네임 스페이스를 지정하기 전에 클래스 이름 앞에 모듈 이름이있는 경우에만 : :라고 생각 했습니까? 그것 앞에있는 모듈없이 그것을 사용할 때 그것은 무엇을 하는가? 나는 이것에 익숙하지 않다. –

+1

공백 네임 스페이스는 전역 네임 스페이스를 나타냅니다. 그래서 Object는 "Object"와 ":: ​​Object"입니다. – Chuck

관련 문제