これは Ruby Monk の演習であり、特定の概念に頭を悩ませています。
たとえば、"soup bowl" = "soup bowl" + 1
有効ではないのに、なぜ@dishes_needed[a] = (@dishes_needed[a] || 0) + 1
以下のコードで機能するのでしょうか? オブジェクトではなく変数だからですか?a = (a||0)+1
もしそうなら、最初に設定したときにコードが機能しないのはなぜですかa = "Soup"
:
class Dish
end
class Soup < Dish
end
class IceCream < Dish
end
class ChineseGreenBeans < Dish
end
class DeliveryTray
DISH_BOWL_MAPPING = {
Soup => "soup bowl",
IceCream => "ice cream bowl",
ChineseGreenBeans => "serving plate"
}
def initialize
@dishes_needed = {}
end
def add(dish)
a = DISH_BOWL_MAPPING[dish.class]
@dishes_needed[a] = (@dishes_needed[a] || 0) + 1
end
def dishes_needed
return "None." if @dishes_needed.empty?
@dishes_needed.map { |dish, count| "#{count} #{dish}"}.join(", ")
end
end
d = DeliveryTray.new
d.add Soup.new; d.add Soup.new
d.add IceCream.new
puts d.dishes_needed # should be "2 soup bowl, 1 ice cream bowl"