web-dev-qa-db-ja.com

Ruby文字列をメソッド名に変換する

Rubyファイルに2つのメソッドが定義されています。

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

メソッドの名前を含む配列。

    methods = ["is_mandatory", "is_alphabets"]

次の場合

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

実際にメソッドを呼び出すのではなく、is_mandatory( "abc")is_alphabets( "abc")と表示するだけです。

文字列をメソッド名に変換するにはどうすればよいですか?どんな助けでも大歓迎です。

乾杯!!

36
verdure

最善の方法はおそらく:

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

参照 Object#send

56
Chowlett

「送信」を使用してみてください。

methods.each do |method| 
  self.send(method, "abc")
end 
13
Aurril

メソッドにパラメータを送信するためにハッシュを追加することもできます。

send("method_name", "abc", {add more parameters in this hash})
0
vikas95prasad

sendを使用した以前のソリューションはすべて問題ありませんが、代わりに public_send を使用することをお勧めします(それ以外の場合は、プライベートメソッドを呼び出すことができます)。

例:

'string'.public_send(:size)
=> 6
0
Gerard Morera