2014-01-24 2 views
0

나는 작은 문제가있어서 머리가 잘 풀리지 않습니다. 클래스에 정의 된 많은 메소드를 재사용하고 싶기 때문에 필자는 필요할 때마다 쉽게 포함 할 수있는 도우미에 넣기로 결정했습니다. 기본 클래스는 다음과 같습니다Ruby에서 클래스 메서드가있는 모듈에 정의 된 메서드 사용

class MyClass 
    include Helper::MyHelper 
    def self.do_something input 
    helper_method(input) 
    end 
end 

을 그리고 여기에 도우미입니다 :

module Helper 
    module MyHelper 
     def helper_method input 
     input.titleize 
     end 
    end 
    end 

는 지금 내가 있기 때문에 내가 범위 문제입니다 생각의 내 클래스에서 "helper_method"를 호출 할 수 없습니다? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

포함 및 확장의 차이점을 조사해야합니다. –

답변

0

self 포인터가 do_something input인데 InternshipInputFormatter인데, InternshipInputFormatter이 아니기 때문입니다. 그래서 적절한 별칭은 그러나 당신이 인스턴스 방법이 아닌 싱글, 같은 InternshipInputFormatter 클래스에 Helper::MyHelper 그렇게 하려고이 signelton 방법으로 모듈의 인스턴스 메소드와 클래스를 확장 포함 한 self.helper_method(input) 될 것 helper_method(input)를 호출 클래스에 대해 : 당신이 볼 수 있듯이

class InternshipInputFormatter 
    extend Helper::MyHelper 
    def self.do_something input 
     helper_method(input) 
    end 
end 

InternshipInputFormatter.do_something 1 
# NoMethodError: undefined method `titleize' for 1:Fixnum 

는 호출은 helper_method 내부의 실행을 중지했습니다. includeextend 사이의 자세한 차이점을 확인하려면 document을 참조하십시오.

관련 문제