2016-10-28 2 views
0

루비는이 같은 방법을 취할 수 있습니다메소드 행을 문자열로 변환하는 방법은 무엇입니까?

def a_few_methods 
    method1 
    method2 
end 

을 ...이 같은 배열을 만들?

['method1', 'method2'] 

나는 작동 다음을하고 있어요,하지만 거추장스러운 것 같다

class Foo 

    def self.method_array 
    %w[method1 method2] 
    end 

    def a_few_methods 
    self.class.method_array.each { |s| send s } 
    end 
end 

나는 방법은 개체 상속 볼 수 있지만 나는 후드 '얻을 수있는 방법이 표시되지 않습니다 소스 파일을 문자열로 읽는 것 말고는 그걸 잡아라. 다른 방법이 있습니까?

답변

1

너는 이와 비슷한 것을 시도 했습니까?

def self.method_array 
    arr = [method(:method1), method(:method2) 
end 

그리고 나는 다음과 같다 프로그램 생성

self.class.method_array.each { |s| s.call } 

처럼 부를 것이다 :

def test_one 
    puts "test one" 
end 

def test_two 
    puts "test two" 
end 


def few_methods 
    arr = [method(:test_one), method(:test_two)] 
end 


a = few_methods 
a.each {|i| i.call } 

하면 텍스트가 줄을 인쇄 나는 그것을 실행할 때 내가 얻을 선. 이것이 도움이 될지 모르겠다.

+0

왜 로컬 변수를 만든 다음 완전히 무시합니까? –

+0

@ Jörg W Mittag 어떤 로컬 변수? 당신은'arr'을 의미합니까? 그것은 Ruby에서 기본적으로 반환되기 때문입니다. 다른 언어 같은 메소드에서 명시적인 return 키워드가 필요하지 않습니다. Ruby의 또 다른 장점은 원하는 클래스를 확장 할 수 있다는 것입니다. 이것을 String 클래스에 추가하려면 Foo mutantkeyboard

+0

그러나 'arr'을 사용하지 마십시오. 코드를 제거하면 코드가 똑같은 방식으로 작동하므로 향후 코드 독자를 혼란스럽게하지는 않습니다. 아, 아뇨,'String'을 상속하면'Foo'의 메소드를 사용할 수있는 문자열이 없으며'Foo' 객체 만 사용할 수 있습니다. –

관련 문제