1

테스트 환경을 위해 모든 응용 프로그램 클래스의 모든 메서드 앞에 binding.remote_pry을 추가하려고합니다. 'define_method'에서 'super'를 어떻게 호출 할 수 있습니까?

나는이 시도 :

classes = [] 
ObjectSpace.each_object { |o| classes << o if o.class == Class } 
classes.each do |classe| 
    classe.methods.each do |method_name| 
     classe.class_eval do 
      define_method(method_name.to_sym) do 
       @@bindings ||= [] 
       @@bindings << Thread.new {binding.remote_pry} 
       super 
      end 
     end 
    end 
end 

을하지만 define_method 내에서 각 방법의 super를 호출하는 방법을 모르는 내가 여기 너무 많이 미친 뭔가를하려고? 다른 방법이 있습니까? 미리 감사드립니다

+0

확실히 뭔가를,

super() 

을 당신은 괜찮을 것 : 그냥 않습니다. '슈퍼 '에게 전화하는 데있어서 또 다른 문제는 무엇입니까? –

+0

FYI :'classes = ObjectSpace.each_object.select {| o | o.class == Class}' – meagar

+0

RuntimeError : define_method()에 정의 된 메소드에서 super의 암시 적 인수 전달이 지원되지 않습니다. 모든 인수를 명시 적으로 지정하십시오. – Cassiano

답변

-1

superdefine_method에 정의 된 메서드로는 작동하지 않는 원래 메서드에서 인수를 전달하려고 시도합니다.) 미친

+0

당신은 요점을 놓쳤습니다. '슈퍼'는 여기서 도울 수 없습니다. 그건 당신이 겹쳐 쓰는 방법을 호출하는 방법이 아닙니다. – meagar

+0

음, "define_method '에서'super '를 어떻게 호출 할 수 있습니까?"라는 질문에 대한 대답입니다. " 그래서 나는 그것이 요점을 놓치고있는 방법을 보지 못한다. OP는 그의 목표를 달성하는 방법의 방향으로 그를 조종 할 또 다른 오류를 얻을 것입니다. 그러나 물론 downvote에 자신을 적응 시키십시오. – katafrakt

+1

시도 된 접근 방식이 작동하지 않는 이유를 실제로 설명하지 않고 잘못된 방향으로 사람들을 안내하는 조언을 사람들에게 제공하면 도움이되지 않습니다. 실제로 문제가 해결 될 것이라는 믿음이 없다면 답을 추가하지 마십시오. – meagar

관련 문제