2017-10-15 47 views
0

具有例如应用方法 总和= 0红宝石 - 上的所有块变量

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

现在上总和我想补充从所述块中的每个对象具有它的一个属性的值,例如

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

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

+1

你的榜样将运行,但不会使大量的感觉在Ruby上下文中。该块的参数(从'v1'到'v4')接收来自块外部的值,类似于调用方法。将这些变量名称设置为块内完全无关的内容是没有任何意义的。特别是['times'](https://ruby-doc.org/core-2.4.0/Integer.html#method-i-times)方法,'v1'将以'0'开始第一次通过代码,第二次通过'1';其余的将两次都是“零”。 – Max

回答

1

啪运营商正在接受块参数:

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 

+0

谢谢!那正是我正在寻找的。 – beginnersquestions