2

さまざまなプログラミング言語(主にインタプリタ)から来て、Scalaを学ぶ途中です。次の演習を行っていますが、エラーが発生します。

def sum(f: Int => Int)(a: Int, b: Int): Int = {
    def loop(a: Int, acc: Int): Int = {
      if (a >= b) acc
      else loop(a+1, f(a) + acc)
    }
    loop(a, 0)
 }
 sum(x => x * x, 2, 4) //Too many arguments  

何が悪いのかわかりませんか?

4

3 に答える 3

5

関数を複数の括弧(複数の引数リスト)で宣言する場合は、そのように呼び出す必要もあります(カレー形式)。

sum(x => x * x)(2, 4)

Scalaの複数のパラメーターリストとリストごとの複数のパラメーターの違いは何ですか?を参照してください。詳細については。

于 2012-09-28T15:25:08.327 に答える
4

関数は、明示的にカレーされた形式で呼び出す必要があります(より適切な名前が必要です)。これは、次のように定義されているためです。

sum(x => x * x)(2, 4)

//def sum (f: Int => Int) (a: Int, b: Int):
//    sum (x => x * x)    (2,      4)

ただし、カレーフォームの一部のみを一度に評価する必要があるため、これも適切です。

val sumOfSquares = sum(x => x * x)
val s = someOfSquares(2,4)
于 2012-09-28T15:24:33.663 に答える
3

2つのパラメータリストで定義sumしましたが、1つだけで呼び出しようとしています。

それを呼び出すための構文的に正しい方法はsum(x => x * x)(2, 4)

于 2012-09-28T15:24:27.927 に答える