[英]Why can't I specify a result type for an anonymous function in Scala?
編輯:找到答案,請參閱文章結尾。
不斷出現錯誤,發現這是因為我試圖將結果類型添加到lambda。 這可以
(p: Int) => p
而
(p: Int): Int => p
引起投訴。 我很驚訝-為什么不允許呢? 畢竟,如果我分配了lambda,我可以在變量中指定一種類型(為了便於閱讀,我將其放在括號中):
val f2: (Int => Int) = (p: Int) => p
但當時我還不如def
它:
def f2(p: Int): Int = p
禁止使用它不會帶來任何明顯的危害,但這是意外的。 有什么想法嗎?
編輯:給我扔石頭,您可以:
(p: Int) => p : Int
好,回答。 以前從未見過。 我想我將在這里留給后代參考。
根據0__的建議,答案是給lambda的主體加上類型的后綴,而不是像def
語法所建議的那樣將其放在參數列表之后。
我正在使用的實際示例用於解構列表並返回前兩個項目的元組:
(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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.