4

この関数定義の何が問題なのか誰か教えてください。

def incr[Int](l: List[Int]): List[Int] = 
  l.foldRight(List[Int]())((x,z) => (x+1) :: z)

Scala コンパイラは、渡された関数の本体の型の不一致について不平を言っていますfoldRight:

<console>:8: error: type mismatch;
 found   : Int(1)
 required: String
           l.foldRight(List[Int]())((x,z) => (x+1) :: z)
                                                ^

ここで何が問題なのですか?

4

2 に答える 2

7

既存のものをオーバーライドするdef incr[Int]名前で任意の型を定義しました。Inttype パラメーターを削除[Int]すると正常に動作するか、 のような別の名前を使用しますT

于 2012-11-20T03:11:59.623 に答える
2

ルイージの言うことは私に合っています。入力を Int のリストとして既に指定しているため、型パラメーターが必要な理由がわかりません。

def incr(l: List[Int]): List[Int] = l.foldRight(List[Int]())((x,z) => (x+1) :: z)

incr(List(1,2,3))                 //> res0: List[Int] = List(2, 3, 4)

しかし、補足として、実際の質問とは関係ありませんが、それが意図した結果である場合、別の方法は次のようになります。

def incr2(l:List[Int]):List[Int] = l map (_+1)
于 2012-11-20T04:35:16.863 に答える