Ruby 将字符串转换为方法名

42

我在我的 Ruby 文件中定义了两个方法。

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"),而不是实际调用该方法。

如何将字符串转换为方法名?任何帮助都将不胜感激。

干杯!!


4
顺便提一下,Ruby 中 is_* 方法的惯用写法是在方法名末尾加一个问号,而不是前缀 "is",比如 mandatory?alphabets? - Jon Cairns
4个回答

62

最好的方法可能是:

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

参见Object#send


如果这些方法属于某个类? - Sakshi Jain
2
那么你需要这样的写法:obj = OwningClass.new; methods.each { |meth| obj.send(meth, 'abc') } - Chowlett
2
如果我们正在谈论类方法,那么 methods.each{ |method| Class.send(meth, argument) } - Jesse Novotny

15

尝试使用 "send"。

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

2

所有使用send的先前解决方案都没问题,但建议改用public_send(否则可能会调用私有方法)。

示例:

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

0

你也可以添加哈希值来向方法发送参数。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接