【发布时间】:2019-11-15 04:26:26
【问题描述】:
我有为符号列表生成的方法。其中一种方法在其定义中包括一个问号。我想用一个持有该符号的变量来调用这样的方法。
假设我们为 :check_element 符号生成了一个方法,对应的方法签名如下所示。
class A
def check_element?
end
end
现在我有一个变量flag = :check_element,我无法调用像A.send(flag) 这样的方法
但A.send((flag.to_s + '?').to_sym) 有效。
我正在考虑是否有更好的方法来实现这一点。
【问题讨论】:
-
我猜总是有
"#{flag}?"或:"#{flag}?"(如果你真的想要一个符号,即使send对字符串很满意)。 -
@thebenman : 你不能简单地设置
flag = :check_element?吗? -
“假设我们为 :check_element 符号生成一个方法,并且相应的方法签名看起来像” - 为什么为
:check_element生成的方法名称会以@987654330 结尾@。问号从何而来? -
顺便说一句,
check_element?是一个 instance 方法——你不能通过A.send(...)调用它
标签: ruby-on-rails ruby metaprogramming