为什么即使我已经精确指定了`puts`的值,我的方法也仍然显示完整的哈希值?

问题描述

我正在尝试在第一个哈希中找到第二个哈希的键和值。可以很好地打印,但是在终端的末尾,它仍然可以打印出完整的哈希,这不是我想要的。 这是终端机打印的内容

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脚本运行。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...