我似乎无法理解这个答案,但也许它与我尝试实现的内容不同。
我有一个字符串,该字符串可能会随时间而变化,我需要将该字符串转换为已定义的方法名:
我有一个字符串,该字符串可能会随时间而变化,我需要将该字符串转换为已定义的方法名:
action = "get_name"
# The method
def get_name
puts "James"
end
# Calling the method
action # => undefined method `action' for main:Object
action
可以是我定义的任何方法,名称以字符串格式呈现。我能说action.to_method
,这意味着你明白我的意思 ;)
我不认为我能说action.to_sym
?
public_send
时应该像这样:public_send(action, a, b)
,其中a
和b
是参数。 - Andrey Deinekopublic_send()
是最好的。谢谢! - Sylareval
可以这样做:eval("action(1,2)")
,其中的1
和2
是实际参数。但正如我们所知道的那样,eval
是邪恶的,特别是当你从传入的参数中进行评估时,所以甚至不要考虑它! - Andrey Deinekopublic_send
? - Sylarpublic_send
对于定义的方法范围也很关注,所以如果你试图使用public_send
调用private
方法,它会失败,而使用send
则会调用它。因此,在干净的接口中,public_send
是最安全的选择。 - Andrey Deineko