问题描述
我正在尝试在第一个哈希中找到第二个哈希的键和值。可以很好地打印,但是在终端的末尾,它仍然可以打印出完整的哈希,这不是我想要的。 这是终端机打印的内容
Egg Fried Rice
3.0
Fish and Chips
6.0
Cheese Pizza
8.0
Spicy Wings
4.0
Lamb Curry
5.0
=> {1=>{"Egg Fried Rice"=>3.0},2=>{"Fish and Chips"=>6.0},3=>{"Cheese Pizza"=>8.0},4=>{"Spicy Wings"=>4.0},5=>{"Lamb Curry"=>5.0}}
我的代码看起来还可以,所以我不确定我要缺少什么或需要什么。
class Menu
attr_reader :menu_items
def initialize
@menu_items =
{
1 => { 'Egg Fried Rice' => 3.00 },2 => { 'Fish and Chips' => 6.00 },3 => { 'Cheese Pizza' => 8.00 },4 => { 'Spicy Wings' => 4.00 },5 => { 'Lamb Curry' => 5.00 }
}
end
def display
@menu_items.each do |_key,value|
value.map do |item,price|
puts item
puts price
end
end
end
end
解决方法
如果直接在irb
中运行代码,这是正常现象。
Ruby默认情况下返回方法中的最后一个表达式。
Ruby的irb
是REPL的意思:Read Evaluate Print Loop
,因此当您在display
中执行方法irb
时,REPL打印的最后一个计算表达式恰好是的返回值。方法display
。
方法display
返回Hash
,因为Enumerable#each
返回self,即您在其上调用Hash
的{{1}}对象。
您可以通过三种选择来避免each
打印irb
的字符串表示形式:
- 将脚本作为
Hash
脚本运行 - 使方法
Shell
返回空字符串 - 将代码作为ruby脚本运行。