您可以使用const_get
method from Module
讓Ruby返回給定名稱的常量。在你的情況下,它會返回Dev
實例給你的任何設備名稱。
使用.each
迭代的項目,你的代碼可能看起來像
devices.each do |device_name|
device = self.class.const_get(device_name)
device.method_name
end
# Which can be shortened to
devices.each{ |dev| self.class.const_get(dev).method_name }
不過,也有實現這種類型的事情更好的方法。最常用的方法是使用Hash
。在你的榜樣,設備列表可能看起來像
devices = {
joe: Dev.new,
mark: Dev.new,
sam: Dev.new
}
然後,遍歷設備很簡單,只要
devices.each do |dev|
dev.method_name
end
# Or
devices.each{ |dev| dev.method_name }
附加:如果你想獲得一點點看上去,你可以使用block version of Hash::new
來增加新設備非常簡單。
# Create the hash
devices = Hash.new{ |hash, key| hash[key] = Dev.new }
# Add the devices
devices['joe']
devices['mark']
devices['sam']
這種哈希的作品完全一樣,上面顯示的一個,但會創建一個新條目,如果給定的密鑰不能在哈希被發現。這種設計的潛在問題在於,如果您輸入錯字,您可能會不小心添加新設備。例如
devices['jon'] # This would make a new Dev instance, which may be undesirable.
來源
2015-02-24 06:04:11
Jon
無關,但我思你就會有一個更好的時間到底,如果你使用'Hash'代替,即'設備= {JoesDev:Dev.new,MarksDev:Dev.new,SamsDev: Dev.new}'。然後你可以像'devices ['JoesDev']。method_name'一樣訪問它們。 – Jon 2015-02-24 05:43:17