2016-11-19 8 views
-2

私は次のコードを実行しよう:なぜ私はスカラーの無名関数の中にforループを持てませんか?

val anonFunc = (x: Pos): List[Pos] => {for(i <- 1 to 10){ println(i)} 

私は次のエラーを取得する:

illegal start of declaration 

をし、私はその理由は分かりません。 このコードは、(1)私が知っている匿名関数の正しい戻り値の型を確保するには、2つの方法があり

+0

ここで達成しようとしていることはありますか?これは有効なスカラではありません – cheseaux

+0

これはなぜ有効なスカラですか?私は無名関数を作成し、valを使用して格納していますか? – orahman2

+0

あなたはそうではありません。例えば、無名関数は 'var inc =(x:Int)=> x + 1'です。あなたの関数のパラメータとは何か、返されるべきものは何ですか? – cheseaux

答えて

2

関数の内部で使用されています、それは書かれているよう

val f = (x: Int) => { x + 1 }: Double 

val f: Int => Double = x => x + 1 

(2)あなたのfor理解がUnitを返します。いいえ。List[Pos]です。何かを返すには本当のあなたはyieldを使用する必要があります。

val anonFunc = (x: Pos) => { for(i <- 1 to 10) yield(x) }: List[Pos] 

いますが、この操作を行うと、あなたは何forリターンするIndexedSeq、ないListであるため、そのコンパイラは戻り値の型としてListが好きではありませんわかります。したがって、明示的に変換する必要があります:

val anonFunc = (x: Pos) => { for(i <- 1 to 10) yield(x) }.toList: List[Pos] 
関連する問題