[英]Partial Functions as an input parameter in scala
我試圖將部分函數作為輸入傳遞給平方函數。 以下代碼是什么?
package PartialFunction
object PartialFunctionSum {
val yourConstant = 10
val pf: PartialFunction[(Int, Int), Int] = {
case (x, y) => x + y + yourConstant
}
def square(cb:(Int, Int) => Int): Unit = {
println(cb(5,10))
}
def main(args: Array[String]): Unit= {
square(pf)
}
}
PartialFunction是Function1
(a => b), square
需要一個Function2
((a,b)=> c)
完成您要執行的操作的一種方法是將cb
類型更改為Function1
。
object PartialFunctionSum extends App {
val yourConstant = 10
val pf: PartialFunction[(Int, Int), Int] = {
case (x, y) => x + y + yourConstant
}
def square(cb:((Int, Int)) => Int): Unit = {
println(cb(5,10))
}
square(pf)
}
另外,在需要FunctionX
任何地方,都可以定義PartialFunction
,因此
square {
case (x, y) => x + y + yourConstant
}
或者使用lambda在Function2中轉換PartialFunction
square( pf.apply(_, _) )
任何需要函數的地方都可以傳遞PartialFunction,
您的問題是平方定義:
def square(cb:(Int, Int) => Int): Unit = {
println(cb(5,10))
}
這意味着cb是一個接收兩個Int並返回另一個Int的函數。
只需如下更改方形簽名:
def square(cb: ((Int, Int)) => Int): Unit = {
println(cb(5 -> 10))
}
現在,您的類型兼容了,其余代碼可以按預期工作。
(Int, Int) => Int
是Function2[Int, Int, Int]
(接受2個Int
參數並返回Int
的Function2[Int, Int, Int]
)的實例,而不是PartialFunction[(Int, Int), Int]
(接受類型(Int, Int)
的輸入並返回Int
)
如果要將參數作為元組傳遞,則:
def square(cb:PartialFunction[(Int, Int),Int]): Unit = {
println(cb((5,10)))
}
例:
def square(cb:PartialFunction[(Int, Int),Int]): Unit = {
println(cb((5,10)))
}
square: (cb: PartialFunction[(Int, Int),Int])Unit
scala> square{case (i, j) => i * j}
50
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.