2013-02-20 3 views
1

나는 몇 가지 방법 내가 클래스와 메소드가 정의 된 경우, 동적 테스트 및 방법을 주장 할 매개 변수로 전달 된 이름으로 메소드를 호출하는 방법은 무엇입니까?

class Test 
    def add(a,b) 
    a+b 
    end 
    ... 
end 

와 클래스가 있습니다. 다음은 코드와 문제 = (I 전화다면

def methodInsideDefined?(className, methodName, param1, param2, result) 
    if(className.is_a?(Class) && className.method_defined?(:methodName)) 
    className.new.methodName(param1,param2).eql?(result) 
    end 
end 

입니다 :

methodInsideDefined?(Test, add, 1, 2, 3) 

내가 진정한 가치를 얻을해야하지만, 나는 점점 해요 :

NameError: undefined local variable or method ‘add’ for main:Object  

정적 인 방법으로 매개 변수 번호를 무시하십시오. 나중에 매개 변수의 동적 번호를 얻지 만 매개 변수의 동적 개수가있는 솔루션이 있으면 알려주십시오. = D

예, 저는 Ruby noobie입니다.

답변

1

시도 : 현재 코드에서

methodInsideDefined?(Test, :add, 1, 2, 3) 

당신이 당신의 함수에 존재하지 않는 변수add를 전달하고 있습니다. 변수 대신에 :add 기호를 함수에 전달하면 작동합니다.

함수 정의에서 다른 방법입니다. 변수 대신 심볼을 사용하고 있습니다. 다음과 같아야합니다.

def methodInsideDefined?(className, methodName, param1, param2, result) 
    if className.is_a?(Class) && className.method_defined?(methodName) 
    className.new.send(methodName,param1,param2).eql?(result) 
    end 
end 

내 코드에는 send의 사용에 유의하십시오. 메서드를 동적으로 호출하려는 경우이 메서드를 사용해야합니다.

+0

너무 간단합니다! 대단히 감사합니다 @ Mischa, 나는 Pry로 테스트 중이었기 때문에 심볼을 사용했고 심볼을 필요로했습니다.'send '가 핵심이었습니다. 잘 작동했습니다. 이제 동적 매개 변수에 대한 솔루션을 시도해 보겠습니다. 다시 한번 감사드립니다. –

관련 문제