这是一个红宝石僧侣的练习,我无法围绕一个特定的概念包裹我的头。为什么变量=变量+1工作?
例如,"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"
等号的RHS评估为值,LHS评估为可变参考 – texasbruce