【问题标题】:String to method name [duplicate]方法名称的字符串[重复]
【发布时间】:2017-07-16 09:05:39
【问题描述】:

我似乎无法关注this answer,但可能与我想要实现的目标不同。

我有一个字符串,那个字符串有时可能不同,我需要把那个字符串转换成一个定义好的方法名:

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

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:
    method(action).call
    

    public_send(action)
    

    例子:

    method(action).call
    #=> James
    public_send(action)
    #=> James
    

    但是请注意,上面的 none 关心上下文,方法最初定义在哪里,所以两者都会在当前对象的上下文中调用它.

    【讨论】:

    • 嗨,即使我有参数也可以工作,即:action(a,b)
    • @Sylar 不,在这种情况下它将不起作用。因为,例如,public_send 看起来像 public_send(action, a, b),其中 ab 是参数。
    • public_send() 是最好的。谢谢!
    • @Sylar 在这种情况下 eval 会这样做:eval("action(1,2)"),其中 12 是实际参数。但是众所周知,eval 是邪恶的,尤其是当你从传入的参数中评估某些东西时,所以不要想它!)
    • 那么什么是最安全的呢? public_send?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多