2016-07-24 5 views
0

なぜ1行目と2作品、の要素が、3がに失敗¿:?変数機能:合計一覧

val sum1= (a: Int, b: Int, c: Int) => a + b + c //OK 
List(1,2,3).reduceLeft(_+_) //OK 

val sum2 =(x: List) =>x.reduceLeft(_+_) //Fail 
+2

あなたは、x 'に要素タイプを追加する必要があります:それは'一覧[INT]や ''一覧[ダブル] 'またはものは何でもあなたが必要となるように、List'。 – Clashsoft

+0

**はい**、ありがとうございます –

答えて

1

あなたはx: Listに要素タイプを追加する必要があり、それがList[Int]またはList[Double]になります。 List自体はraw typeです。これはScalaでは不正です。型アノテーションがなければ、コンパイラは+演算子がreduceLeft(_+_)の部分で何を意味するのかも知らないため、エラーが発生します。

0

Listの内側にあるオブジェクトが+演算子を定義する型であることを示すコンパイラには不足しています。基礎となるScalaライブラリを使用して任意の数値型のListを追加できるメソッドを定義するうえで便利な方法です。

Scalaではすでにsumが定義されているため、この場合でもreduceは必要ありません。 Listはより高度な種別のコンストラクターです。詳細はhereです。

def addList[T : Numeric](list: List[T]): T = list.sum