2010-11-23 3 views
1

동적 메서드 정의에 도움이 필요합니다.동적 메서드 Ruby 도움말

기본적으로 한 모듈 내에 여러 클래스가 있습니다. 각각의 클래스에 고유 한 문자열 목록을 기반으로 각 클래스 내에서 메소드 목록을 생성해야합니다 (즉, 다른 클래스는 문자열 목록이 다릅니다). 그래서 기본적으로 내가 같은 모듈 내에 상주 이러한 각 클래스에서 사용할 수있는 방법을 만들

client.call(the_string, @an_instance_variable) 

동적 방법의 무리를 생성하기 위해, : 뭔가 같은 방법의 몸은해야한다 전달 된 문자열 배열을 기반으로합니다. 같은

뭔가 :

def name 
    client.call("name", @an_instance_variable) 
end 

난 그 말이 희망 :

register_methods @@string_array 

그래서 말은 "이름"다음과 같은 방법을 생성하는 것, 배열의 문자열했다. 나는 몇 시간 동안 여러 가지 일을 시도한 후에 난처한 상황에 처하게되고, 모든 의견을 정말로 감사하게 될 것입니다. 감사!

답변

4

은 IRB 사용할 수없는,하지만 난 당신이 @an_instance_variable를 사용 할 작정 방법을 모르는

def register_methods strings 
    strings.each do |s| 
    define_method s.to_sym do 
     client.call("name", @an_instance_variable) 
    end 
    end 
end 
0

을 작동해야하지만 당신은 또한 다음과 같은 인수를 메소드를 정의 할 수 있습니다

def name(arg) 
    client.call("name", arg) 
end 

def age(arg) 
    client.call("age", arg) 
end 
:
def register_methods *methods 
    methods.each do |method| 
    define_method method do |arg| 
     client.call(method, arg) 
    end 
    end 
end 

그래서 당신은 두 가지 새로운 방법이처럼 보이는 register_methods ("이름", "나이") 당신이 가지고있는 것을 보내는 경우