首页 > 解决方案 > 如何通过发送红宝石调用带有问号的方法

问题描述

我有为符号列表生成的方法。其中一种方法在其定义中包括一个问号。我想用一个持有该符号的变量来调用这样的方法。

假设我们为 :check_element 符号生成了一个方法,并且相应的方法签名看起来像。

class A
    def check_element?

    end
end

现在我有一个变量flag = :check_element,我无法像这样调用方法A.send(flag)

A.send((flag.to_s + '?').to_sym)有效。

我在想是否有更好的方法来实现这一点。

标签: ruby-on-railsrubymetaprogramming

解决方案


无需将方法名称参数转换为符号,因为send也接受字符串。这允许将您的示例简化为

A.send(flag.to_s + '?')

可以使用字符串插值将其简化为

A.send("#{flag}?")

推荐阅读