Reputation: 3341
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!!
Upvotes: 43
Views: 33842
Reputation: 859
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
Upvotes: 2
Reputation: 46675
Best way is probably:
methods.each { |methodName| send(methodName, 'abc') }
See Object#send
Upvotes: 63
Reputation: 1342
You can also add hash to send parameters to the method.
send("method_name", "abc", {add more parameters in this hash})
Upvotes: 0
Reputation: 2469
Try using "send".
methods.each do |method|
self.send(method, "abc")
end
Upvotes: 15