2016-06-08 96 views
0

編輯:找到答案,查看帖子結尾。爲什麼我不能在Scala中爲匿名函數指定結果類型?

不斷收到錯誤,發現它是因爲我試圖將結果類型添加到lambdas。這是精細

(p: Int) => p

(p: Int): Int => p

導致其投訴。我很驚訝 - 爲什麼不允許它?畢竟我可變量指定類型(我已經爲括號可讀性型),如果我指定的λ:

val f2: (Int => Int) = (p: Int) => p

但當時我還不如def它:

def f2(p: Int): Int = p

我不能看到任何明顯的傷害,但它是意想不到的。思考?


編輯:用石頭砸我,您可以:

(p: Int) => p : Int

OK,回答。以前從未見過。我想我會在這裏留下後代。

+0

您應該添加一個額外的答案,所以這個問題可以關閉 –

+0

@ 0__:ta,會做 – user3779002

回答

1

根據0__的建議,答案是將lambda的主體後綴加上類型,而不是像def語法所暗示的那樣放在參數列表後面。我用,以解構的列表,並返回第2項的元組

實際的例子:

(p: List[Int]): Tuple2[Int, Int] => { val x :: y :: rest = p; (x, y) }

失敗,但這種成功

(p: List[Int]) => { val x :: y :: rest = p; (x, y) }: Tuple2[Int, Int]

相關問題