【发布时间】:2016-10-04 16:23:00
【问题描述】:
我创建了一个名为 Dish 的类,然后我在其中创建了许多菜单对象,包含名称和价格的菜单项,这些信息是通过初始化方法获得的。打电话时
chickenstew = Dish.new("Chicken Stew", 4.50)
然后,我使用方法def add_to_menu 和@menu << args 将一些这样的对象添加到一个包含在一个名为Menu 的新类的实例变量@menu = [] 的数组中。当我显示包含单个对象的新菜单数组时,您显然会得到对象信息,以及名称和价格信息,如下所示:
[[#<Dish:0x007f9662134818 @dish={:name=>"Chicken Stew", :price=>4.5}>,
#<Dish:0x007f966206ec30 @dish={:name=>"Beef & Ale Pie", :price=>5.0}>,
#<Dish:0x007f966101a7a8 @dish={:name=>"Chicken & Leek Pie", :price=>4.0}>,
#<Dish:0x007f9662365420 @dish={:name=>"Vegetable Pie", :price=>3.5}>,
#<Dish:0x007f96622de038 @dish={:name=>"Fish Pie", :price=>5.5}>,
#<Dish:0x007f966224f068 @dish={:name=>"Chips", :price=>2.0}>,
#<Dish:0x007f966222c1d0 @dish={:name=>"Mushy Peas", :price=>1.5}>]]
我的问题是,您究竟如何遍历这个哈希数组,以便仅提取名称和价格详细信息,以便将puts 显示到屏幕上?我已经尝试过@menu.each { |hash| puts "Item: #{hash[:name]. Price: £#{hash[:price]}" },但这显然失败了,并且我得到了诸如 'TypeError: no implicit conversion of Symbol into Integer'
任何帮助将不胜感激。
【问题讨论】:
-
你有
[[..]],所以@menu[0].each {..可以工作。你以为是Hash,其实是Dish对象,也就是AR对象。 -
为那个帮助干杯,不幸的是没有,但这可能是因为我需要调用 disc.name 和 disc.price 而不是按原样尝试代码,而只是添加 [0]给它。不过干杯!
-
没有。错误来自
@menu.each { |hash|,您认为这里的hash是内部Array。然后你打电话给[:name],这会引发错误。所以@menu[0].each { |hash| puts "Item: #{hash[:name]. Price: £#{hash[:price]}" }也可以。
标签: arrays ruby iteration hash-of-hashes