val f1 = (x: Int) => x match {
case x1 => x * 2
}
val f2 = (x: Int, y: Int) => (x, y) match {
case (x1, y1) => x1 y1
}
val f3 = f1.compose(f2)
期望 f3 是 (Int, Int) => Int 的部分函式,??但我收到以下錯誤
Found: (f2 : (Int, Int) => Int)
Required: Any => Int
uj5u.com熱心網友回復:
正如檔案所暗示的那樣,compose特別是由 的兩個實體組成Function1,即一元函式的兩個實體。
如果你想保持你的代碼不變,這樣做的方法是
f1 andThen f2.curried
如果您仔細查看檔案
compose 回傳一個新函式 f st f(x) == apply(g(x))
andThen 回傳一個新函式 f st f(x) == g(apply(x))
注意應用順序的不同。是的,我知道命名比較混亂。
編輯:您希望這些應用的方式令人困惑。Jorg 的回答中提供了另一種方式。
uj5u.com熱心網友回復:
二者scala.Function1.compose并scala.PartialFunction.compose只需要用作具有單個引數的引數。但是f2有兩個引數,因此,它與 的引數型別不兼容compose。
您可以使用以下方法轉換f2為將其引數作為 a 的單引數函式:scala.Tuplescala.Function2.tupled
val f3 = f1.compose(f2.tupled)
注意:f3現在是Function1[Tuple2[Int, Int], Int]aka ((Int, Int)) => Int,即它需要像這樣應用:
f3((2, 3))
要將其變成Function2[Int, Int, Int]aka (Int, Int) => Int,您可以使用以下scala.Function.untupled方法:
val f4 = Function.untupled(f3)
斯卡斯蒂鏈接
另請注意,既不是f1也不f2是scala.PartialFunctions。f1是scala.Function1[Int, Int]aka(Int) => Int并且f2是scala.Function2[Int, Int, Int]aka(Int, Int) => Int。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/393576.html
