2017-10-15 48 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