Как отобразить несколько элементов с помощью put?

Я написал приложение для путешествий с элементами тура и пытаюсь отобразить заказ в конце.

Когда я использую put @order_items, я получаю {"SevendaySurfSportTour"=>2} за два тура.

Я хочу, чтобы он отображался 2 SevendaySurfSportTour в конце. Но я не знаю как, любая помощь будет полезна?

class TourOrder
    def initialize
        @order_items = Hash.new(0)
    end
    def add_item(name, quantity)
        @order_items[name] += quantity
    end
    def get_items
        return @order_items
    end

    def display
        puts "Thank you for coming!"
        puts @order_items
    end
end

person Devbreaker29    schedule 19.12.2020    source источник


Ответы (2)


@order_items - это хеш, и что было напечатано, если строковое представление такого хеша. Если вы хотите отформатировать вывод по-другому, вы должны реализовать это самостоятельно - например, так:

def display
  puts "Thank you for coming!"

  @order_items.each do |name, quantity|
    puts "#{quantity} #{name}"
  end
end
person spickermann    schedule 19.12.2020
comment
Отлично, это сработало. Спасибо, я думаю, каждый день изучаю что-то новое. :) - person Devbreaker29; 19.12.2020

Код ниже работает для вас

class TourOrder
  def initialize
    @order_items = Hash.new(0)
  end
 
  def add_item(name, quantity)
    @order_items[name] += quantity
  end
 
  def get_items
    @order_items
  end

  def display
    puts "Thank you for coming!"
    puts items 
  end

  def items
    @order_items.collect{ |k, v| "#{v} #{k}"}
  end
end

t = TourOrder.new
t.add_item('SevendaySurfSportTour', 2)
t.add_item('Foo', 4)
t.add_item('Bar', 1)
t.display
=> Thank you for coming!
   2 SevendaySurfSportTour
   4 Foo
   1 Bar
person Ritesh Choudhary    schedule 19.12.2020