6

リストから引数を指定して関数を呼び出す方法はありますか? Python での同等物はsum(*args).

// Scala

def sum(x: Int, y: Int) = x + y
val args = List(1, 4)

sum.???(args)      // equivalent to sum(1, 4)

sum(args: _*)ここでは機能しません。とにかく、関数の宣言を変更しないでください。パラメーターが繰り返される関数に精通していますdef sum(args: Int*)

4

2 に答える 2

2

まあ、あなたは書くことができます

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に減らします。この例では、. 初期値から始まります。合計したいので、空のリストの合計はゼロになります。次に、現在のアキュムレータ (実行中の合計) とリストの連続する各要素を使用して関数を呼び出します。ABA = B = Intinit

だからそれは好きです

var result = 0
result = sum(result, 1)
result = sum(result, 4)
...

このreduceメソッドは、リストが空ではないことを前提としており、要素の型が変更されていないことを前提としています (関数は 2 つIntの から にマップする必要がありますInt)。

于 2013-09-29T13:46:32.303 に答える