2011-11-07 2 views
33

내 루비 파일에 정의 된 두 가지 메소드가 있습니다.Ruby를 메소드 이름으로 변환하는 문자열

def is_mandatory(string) 
     puts xyz 
end 
def is_alphabets(string) 
     puts abc 
end 

메소드의 이름을 포함하는 배열.

methods = ["is_mandatory", "is_alphabets"] 

나는 그냥, is_mandatory ("ABC") is_alphabets ("ABC")를 표시

methods.each do |method| puts method.concat("(\"abc\")") end 

을 다음보다는 실제로 메소드를 호출 않습니다.

어떻게 문자열을 메서드 이름으로 변환 할 수 있습니까? 도움을 주시면 대단히 감사하겠습니다.

건배 !!

+3

참고로, is_ * 메소드를 사용하는 방법은 접두사 "is"대신 "mandatory?"및 "alphabets?"대신 물음표를 사용하는 것입니다. –

답변

50

가장 좋은 방법은 아마도 :

methods.each { |meth| send(meth, 'abc') } 

Object#send

+0

고마워요! – verdure

+0

이 메소드가 일부 클래스에 속해 있습니까? –

+2

그러면 다음과 같은 것을 원할 것입니다 : obj = OwningClass.new; methods.each {| meth | obj.send (meth, 'abc')} – Chowlett

12

은 "보내기"를 사용해보십시오 참조하십시오.

methods.each do |method| 
    self.send(method, "abc") 
end 
관련 문제