轨道上的红宝石 - 我们什么时候知道我们应该使用符号



这是我试图理解的代码,现在令人困惑的部分是代码中的:p roduct_id,特别是":p roduct_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

符号:

  • 基本上是字符串常量
  • 创建一次。 :product_id无论何时使用它,都将是同一个对象。因此,它们可以节省内存。另一方面,如果你多次编写"product_id",你基本上是在创建尽可能多的字符串对象。
  • 不能利用正则表达式和插值(大部分)的好处,除非您在符号上使用to_s方法

简而言之,对不需要处理或修改的短字符串常量使用符号。

例如:符号非常适合哈希等中的键。 明白了吗?

符号只是指向包含其名称的对象的指针,而字符串始终是不同的对象。

如果要在代码中多次重复名称,请使用一个符号,这相当于只使用一个对象。

例如,如果在代码中使用字符串"France" 100 次,则更愿意使用 :France 。优点是,在第一种情况下,您将实例化 100 个对象,而在第二种情况下,只需实例化一个对象。

在您的示例中,也许您会感到困惑product_id: product_id因为 Hash 是以 JSON 样式表示的哈希。这相当于:product_id => product_id

相关内容

  • 没有找到相关文章

最新更新