这是我想要理解的代码,现在令人困惑的部分是代码中的:product_id,特别是“:product_id”的“:”部分 我的问题是我们应该怎么知道我们应该使用“:”?
def up
# replace multiple items for a single product in a cart with a single item
Cart.all.each do |cart|
# count the number of each product in the cart
sums = cart.line_items.group(:product_id).sum(:quantity)
sums.each do |product_id, quantity|
if quantity > 1
# remove individual items
cart.line_items.where(product_id: product_id).delete_all
# replace with a single item
item = cart.line_items.build(product_id: product_id)
item.quantity = quantity
item.save!
end
end
end
end
答案 0 :(得分:3)
符号:
:product_id
也将是同一个对象。因此他们节省了记忆。另一方面,如果多次编写"product_id"
,则基本上创建了多个字符串对象简而言之,使用符号表示您不需要处理或修改的短字符串常量。
例如:符号非常适合哈希等中的键。获取它吗?
答案 1 :(得分:2)
符号只是指向包含其名称的对象的指针,而字符串始终是不同的对象。
如果您要在代码中多次重复使用某个名称,请使用一个符号,该符号相当于只使用一个对象。
例如,如果您在代码中使用字符串"France"
100次,则您更愿意使用:France
。优点是,在第一种情况下,您将实例化100个对象,在第二种情况下只需一个。
在您的示例中,您可能会感到困惑,因为product_id: product_id
是以JSON样式表示的哈希。这相当于:product_id => product_id