まあ、あなたは書くことができます
sum(args(0), args(1))
しかし、これを任意のリストの長さで機能させたいと思いますか? fold
次に、またはに行きますreduce
:
args.reduce(sum) // args must be non empty!
(0 /: args)(sum) // aka args.foldLeft(0)(sum)
これらのメソッドは、リストのペアごとの削減を想定しています。たとえば、 type の要素のリストを typeの単一の要素foldLeft[B](init: B)(fun: (B, A) => B): B
に減らします。この例では、. 初期値から始まります。合計したいので、空のリストの合計はゼロになります。次に、現在のアキュムレータ (実行中の合計) とリストの連続する各要素を使用して関数を呼び出します。A
B
A = B = Int
init
だからそれは好きです
var result = 0
result = sum(result, 1)
result = sum(result, 4)
...
このreduce
メソッドは、リストが空ではないことを前提としており、要素の型が変更されていないことを前提としています (関数は 2 つInt
の から にマップする必要がありますInt
)。