【问题标题】:Alternative way to call class method by param or string通过参数或字符串调用类方法的替代方法
【发布时间】:2013-02-11 20:27:20
【问题描述】:

我想传递一个类方法作为参数让另一个对象调用它,即

do_this(Class.method_name)

然后:

def do_this(class_method)
  y = class_method(local_var_x)
end

我能看到的唯一方法是将其作为字符串传递并使用 eval,或者将类和方法作为字符串传递,然后进行常量化并发送。 eval 的缺点似乎是速度和调试?

有更简单的方法吗?

编辑:

很好的答案,但意识到我问的问题略有错误,想使用未通过方法传递的参数。

【问题讨论】:

    标签: ruby


    【解决方案1】:

    我建议采用类似于您提出的第二种解决方案的方法。

    do_this(Class.method(:name), x)
    

    然后:

    def do_this(method, x)
       y = method.call(x)
    end
    

    另见Object#method的文档。

    【讨论】:

      【解决方案2】:

      考虑使用 proc 对象:

      def do_this(myproc)
          y = myproc.call
      end
      

      然后

      do_this( Proc.new { klass.method(x) } )
      

      虽然你也应该考虑使用块,它更像是 ruby​​ 风格。看起来像:

      def do_this
         y = yield
      end
      

      并通过以下方式调用:

      do_this { klass.method(x) }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-11
        • 1970-01-01
        • 2016-02-24
        • 1970-01-01
        • 2017-07-15
        相关资源
        最近更新 更多