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