2014-02-05 47 views
1
foo = [10,20,30,40,50,60] 
foo_total = 0 
foo.each do |f| 
print foo_total += f 
end 
print foo_total 

此代碼示例的輸出將是10 30 60 100 150 210 210但我實際上是尋找10 20 30 40 50 60 210 我知道,它可以通過使用下面的代碼紅寶石+ =賦值運算符

foo = [10,20,30,40,50,60] 
foo_total = 0 
foo.each do |f| 
print f 
foo_total += f 
end 
print foo_total 

不過來實現,有沒有更優雅的方法,只需要在foo.each塊中的一行?

編輯:它不僅對輸出之外,還對具有可變foo_total包含所有值的富

+0

我想你可以使用像'print(foo_total + = f) - f'這樣的憎惡。 –

+1

'print f; foo_total + = f'是一行,但不是一個語句。 – MxyL

回答

1

待辦事項總和如下

(arup~>~)$ pry --simple-prompt 
>> foo = [10,20,30,40,50,60] 
=> [10, 20, 30, 40, 50, 60] 
>> foo.push(foo.inject(:+)) 
=> [10, 20, 30, 40, 50, 60, 210] 
>> 
+0

只是爲了加強,因爲OP似乎在尋找一個字符串:'foo.join('')' – Brian

+0

@Brian好吧!完成.. –

+1

我懷疑OP想要一個字符串。使用'print'會導致這些值在控制檯的一行中輸出,但沒有任何跡象表明數組應該以任何方式連接或「串」化。 –

1

如何:

foo.each do |f| 
    foo_total += f.tap { |f1| print f1 } 
end 
+0

+1 'tap',但我懷疑你只是爲了保存一行代碼而使用它。 (我喜歡那種方法的聲音,'tap.tap.tap'甚至更好。) –