【问题标题】:What exactly does (&:id) do in Product.all.map(&:id) [duplicate](&:id) 在 Product.all.map(&:id) 中究竟做了什么 [重复]
【发布时间】:2013-09-02 15:19:10
【问题描述】:

这是我试图绕开的代码行:

Category.all.map(&:id).each { |id| Category.reset_counters(id, :products) }

希望有人可以帮助我了解 (&:id) 正在做什么以及它如何影响其他产品线?我相信它会将符号 :id 变成一个 proc 来响应 id?!?但随后就变得混乱了……

提前致谢!

【问题讨论】:

  • 绝对是骗子。虽然很难搜索......应该把它拼写成“与号冒号”。 (我不能删除;它有答案)
  • 别担心,我搜索了 lambda 运算符快捷方式
  • 我更喜欢这个替代方案:Category.all.each { |cat| Category.reset_counters(cat.id, :products) }
  • 这对我来说更容易阅读!
  • @jvnill 为什么要将某些东西标记为与本身是重复的东西的重复?

标签: ruby-on-rails ruby block proc


【解决方案1】:
Category.all.map(&:id)

是简写

Category.all.map { |a| a.id }

至于它如何影响行的其余部分,以上部分将所有id 值作为单个Array 返回。然后这个Array 的id 被传递到另一个对each 的调用中,它迭代地将每个id 传递到reset_counters

【讨论】:

    猜你喜欢
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2011-06-18
    • 2015-12-02
    • 2012-07-23
    • 2016-09-10
    • 2023-03-15
    相关资源
    最近更新 更多