1

Ruby Monk で問題が発生しています。 https://rubymonk.com/learning/books/1-ruby-primer/problems/155-restaurant#solution4804

彼らの解決策は素晴らしいです。私はそれが好きで、私のものよりコンパクトです。問題は私のものです。コスト パラメータから splat 演算子を削除した場合にのみ機能する理由がわかりませんorders。このままじゃいけないのに、どうしたものかと悩んでいます。すべてを理解する必要がないこともあると思いますが、先に進むのが最善です.. しかし、興味があります。

これが私のものです:

class Restaurant
  def initialize(menu)
    @menu = menu
  end

  def cost(*orders)
    total_cost = 0
    orders.each do |item, number|
    total_cost += @menu[item] * number
  end
end

menu = {:rice => 3, :noodles => 2}
orders = {:rice => 1, :noodles => 1}
eat = Restaurant.new(menu)
puts eat.cost(orders)

編集:提案された解決策を以下に含めるには

class Restaurant
  def initialize(menu)
    @menu = menu
  end

  def cost(*orders)
    orders.inject(0) do |total_cost, order|
      total_cost + order.keys.inject(0) {|cost, key| cost + @menu[key]*order[key] }
    end
  end
end

編集:コメントで自分の質問を片付けて答えるには

私はこれらの実験を試みinjectましたが、「装着」された配列ブラケットを「削除」していることを示しています。おそらくそれについて考える最も適切な方法ではありませんか?それは私の混乱を解消するのに役立ちます。

order = { :rice => 1, :noodles => 1 }
menu = { :rice => 3, :noodles => 2 }

[order].inject(0) do |bla, blu|
    p bla       #=> 0
    p blu       #=> {:rice=>1, :noodles=>1}
    p blu.keys  #=> [:rice, :noodles]
end
4

1 に答える 1