這是一個紅寶石僧侶的練習,我無法圍繞一個特定的概念包裹我的頭。爲什麼變量=變量+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