【问题标题】:Ruby - Apply method on all block variablesRuby - 对所有块变量应用方法
【发布时间】:2017-10-15 14:08:55
【问题描述】:

例如 总和 = 0

2.times do |v1, v2, v3 , v4|
  v1 = FactoryGirl...
  v2 = FactoryGirl...
  ..
  v4 = ...
sum = 
end

现在总而言之,我想添加一个属性的值,即块中的每个对象都有它,例如

sum = v1[:nr_sales] + v2[:nr_sales] +...

有没有办法一次做到这一点(对块的所有参数应用方法)?

【问题讨论】:

  • 您的示例将运行,但在 Ruby 上下文中没有多大意义。块的参数(您的v1v4)从块外部接收值,类似于调用方法。将这些变量名称设置为块内完全不相关的东西没有任何意义。特别是对于times 方法,v1 第一次通过代码以0 开头,第二次以1 开头;其余的两次都是nil

标签: ruby-on-rails ruby ruby-block


【解决方案1】:

块参数中接受 Splat 运算符:

def foo
  yield 1, 2, 3, 4
end

foo { |*args| puts args.inject(:+) } #=> 10

因此,在您的情况下,您可以执行以下操作:

2.times do |*args|
  sum = args.sum { |h| h[:nr_sales] }
end

【讨论】:

  • 谢谢!这就是我想要的。
猜你喜欢
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多