【问题标题】:invoke methods which are elements of an array [duplicate]调用作为数组元素的方法[重复]
【发布时间】:2014-04-01 09:02:46
【问题描述】:
class Shop
  def self.name
    "kids-toy"
  end

  def self.postcode
    1000
  end
end

methods = ["name", "postcode"]
methods.each {|m|
  mcall = "Shop.#{m}"
  eval mcall
}

除了调用eval 来调用作为数组元素的方法之外,还有其他方法吗?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    使用Object#send

    methods.each { |m| Shop.send(m) }
    

    【讨论】:

    • 或使用public_send 来避免破坏封装,如果您认为这可能是个问题。
    【解决方案2】:

    是的,可以使用Method#call 方法:

    class Shop
      def self.name
        "kids-toy"
      end
    
      def self.postcode
        1000
      end
    end
    
    methods = ["name", "postcode"]
    methods.each do |m|
      p Shop.method(m).call
    end
    
    # >> "kids-toy"
    # >>  1000
    

    Shop.method(m) 会给你一个 Method 类的对象,现在你可以在该方法对象上调用方法 #call

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      相关资源
      最近更新 更多