我對三引數函式有兩種定義,如下所示:
val minus1: (Int, Int, Int) => Int = _ - _ - _
val minus2: (Int, Int, Int) => Int = (_ - _) - _
減1很好,但減2被報告為非法,這讓我很困惑
按照 ComDubh 的指示,我撰寫了一個新函式,如:
val minus3 : (Int, Int, Int)=>Int = ((_-_)-_)
為什么這仍然是錯誤的?這是否意味著我不應該在“_”之間放置任何括號?我有一個更復雜的問題,比如
val func4: Int=>Int = x => if (x>0) 1 else -1
val func5: Int=>Int = if (_>0) 1 else -1
func4 很好,但是為什么我不能省略引數名稱“x”來將函式重寫為 func5(編譯器將 1 或 -1 視為回傳值并報告 Int(1) 不適合 Int=>Int )。比你的時間
uj5u.com熱心網友回復:
您正在創建一個匿名函式。Scala 必須知道匿名函式的定義在哪里開始和結束。您在 in 中使用括號minus2告訴 Scala 這_ - _是完整的函式。編譯器當然不滿意,因為您缺少一個引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/344789.html
標籤:斯卡拉
下一篇:toMap的隱式轉換器
