當我在Ruby中編寫方法時,我常常會想:「我敢打賭,這可以做得更簡單」。這是一個示例方法。它添加從1開始的所有數字,直到數字n
。有沒有辦法讓變量solution
?簡化Ruby方法:將不必要的變量關閉
def sum n
solution = 0
for i in 1..n do
solution += i
end
solution
end
當我在Ruby中編寫方法時,我常常會想:「我敢打賭,這可以做得更簡單」。這是一個示例方法。它添加從1開始的所有數字,直到數字n
。有沒有辦法讓變量solution
?簡化Ruby方法:將不必要的變量關閉
def sum n
solution = 0
for i in 1..n do
solution += i
end
solution
end
使用Enumerable#inject
(或Enumerable#reduce
):
(1..10).inject :+
# => 55
falsetru的是和速記答案。但爲了對擴大自己的利益,inject
通常看上去更像是這樣的:
def sum n
(1..n).inject {|result, i| result + i}
end
在這個例子中,該塊的結果反饋作爲result
每次連續迭代,所以它建立一個累積總。
inject
是非常通用的,但有很多其他迭代器可以幫助您節省管理計數變量。查找times
,each
和map
首先。
我認爲**(1..10).inject(:+)** – rejin
它沒有括號。 – ph3nx
@rejin,在Ruby中,除非表達式不明確,否則可以省略括號。 – falsetru