【问题标题】:Ruby convert string to method nameRuby 将字符串转换为方法名
【发布时间】:2011-12-23 14:24: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") 而不是实际调用该方法。

如何将字符串转换为方法名称? 任何帮助是极大的赞赏。

干杯!!

【问题讨论】:

  • 附带说明,Ruby 执行 is_* 方法的方式是使用问号而不是前缀“is”,即mandatory?alphabets?

标签: ruby methods


【解决方案1】:

以前使用send 的所有解决方案都可以,但建议改用public_send(否则您可以调用私有方法)。

例子:

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

【讨论】:

    【解决方案2】:

    最好的方法可能是:

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

    Object#send

    【讨论】:

    • 如果这些方法属于某个类?
    • 那么你想要类似:obj = OwningClass.new; methods.each { |meth| obj.send(meth, 'abc') }
    • 或者如果我们在谈论类方法,那么methods.each{ |method| Class.send(meth, argument) }
    【解决方案3】:

    您还可以添加哈希以向方法发送参数。

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

    【讨论】:

      【解决方案4】:

      尝试使用“发送”。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 2016-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2010-09-06
        相关资源
        最近更新 更多