2016-10-28 6 views
0

は、Rubyのは、このような方法で取ることができます:メソッド行を文字列化する方法は?

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örgW Mittagどのローカル変数?あなたは 'arr'を意味しますか?これは、Rubyではデフォルトで返されるためです。他の言語のようなメソッドで明示的なreturnキーワードを必要としません。 Rubyのもう一つの素晴らしい点は、好きなクラスを拡張できることです。これをStringクラスに追加する場合は、Foo mutantkeyboard

+0

しかし、あなたは決して 'arr'を使用しません。あなたはただそれを取り除くことができ、あなたのコードはまったく同じように動作し、あなたのコードの将来の読者を混乱させません。ああ、いいえ、 'String'を継承すると、' Foo'のメソッドを使用できる文字列はなく、 'Foo'オブジェクトだけが可能です。 –

関連する問題