2017-10-12 27 views
0

클래스의 모듈을 포함하는 방법 :내 보석의 모듈은 레일 응용 프로그램에서 사용자 정의 클래스에 의해 확장되어 또 다른 보석의 클래스에 포함되어

내 보석 :

module MyGem 
    def my_method 
    end 
end 
AnotherGem.send :include, MyGem 

또 다른 보석 :

class AnotherGem 
end 

클래스 레일 응용 프로그램에서 :

class ClassInRailsApp < AnotherGem 
end 

실행이 다음 동작에 이르게 : 클래스가 확장되기 전에 내 모듈이 포함되어

$ rails c 
Loading development environment (Rails 5.1.4) 
irb(main):004:0> MyGem.method_defined? :my_method 
=> true 
irb(main):005:0> AnotherGem.method_defined? :my_method 
=> true 
irb(main):006:0> ClassInRailsApp.method_defined? :my_method 
NoMethodError: undefined method `my_method' for ClassInRailsApp:Class 

이 어떻게 확신 할 수 있습니까?

편집 : 나는 시도

직접 ClassInRailsApp에서 MyGem 포함하고 지정된 인스턴스 방법은 아직 사용할 수 없습니다. 문제가 그것에 관련 될 수 있습니까?

+0

여기 예제 코드는 실제로 'true'를 생성하므로 정확하게 문제가 무엇인지 잘 모르겠습니다. 이것은 작동해야하며, 그것은 나를 위해 작동합니다. – tadman

답변

1

생각할 때, 방금 메소드를 호출하고 있습니다. @ object.my_method. 실제로 클래스 수준 메소드를 호출하고 있습니다. Object.my_method가 있지만 인스턴스 수준 메서드로 정의되어 있어야합니다. 그러나 Object.new.my_method를 시도하는 올바른 방법은 그렇게하지 않습니다.

이와 같은 메소드를 호출하려면 클래스의 메소드로 정의해야합니다. 더 나은 이해를 위해 this page을 참조하십시오. 모듈을 통해 클래스 레벨 메소드를 정의하는 방법에 대한 "A Common Idiom"섹션.