Ruby convert string to method name

2020-02-20 06:45发布

问题:

I have two methods defined in my ruby file.

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

An array containing the names of the methods.

    methods = ["is_mandatory", "is_alphabets"]

When I do the following

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

It just displays, is_mandatory("abc") is_alphabets("abc") rather than actually calling the method.

How can i convert the string to method name? Any help is greatly appreciated.

Cheers!!

回答1:

Best way is probably:

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

See Object#send



回答2:

Try using "send".

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


回答3:

You can also add hash to send parameters to the method.

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


回答4:

All previous solutions with send are fine but it is recommended to use public_send instead (otherwise you can be calling private methods).

Example:

'string'.public_send(:size)
=> 6


标签: ruby methods