RUBY-从包含类名称的常数调用类

  • 本文关键字:常数 调用 包含类 RUBY- ruby
  • 更新时间 :
  • 英文 :


我有一个类,可以调用不同的供应商,以查找是否可用。如何执行每个常数返回的类?

class ItemProvider
   ADAPTER_ONE = Providers::ItemFromSupplierOne
   ADAPTER_TWO = Providers::ItemFromSupplierTwo
   def get_item(item)
     id = ItemDetail.new(item)
     %w(ADAPTER_ONE ADAPTER_TWO).each do |provider| 
         item_detail = provider.new(id)
         break if item_detail.valid?
     end
   item_detail
end

您的问题是您没有制作包含常数值的数组;您正在用字符串" adapter_one"one_answers" adapter_two"制作数组。 %w()语法总是制作一系列字符串 - 它不能解决变量名称。

您想要的是将get_item代码更改为这样的东西:

def get_item(item)
  id = ItemDetail.new(item)
  [ADAPTER_ONE, ADAPTER_TWO].each do |provider| 
    item_detail = provider.new(id)
    break item_detail if item_detail.valid?
  end or nil # break automatically makes the block return the value you break with
end

旁边,我个人认为我会这样重写:

def get_item(item)
  id = ItemDetail.new(item)
  [ADAPTER_ONE, ADAPTER_TWO].map {|provider| provider.new(id) }.find &:valid?
end

是的,您有一系列的字符串而不是常数,但是如果您想在使用字符串的课程中走那条路,如果您查看http://blog.sidu,那将是不错的。

最新更新