我试图将部分函数作为输入传递给平方函数。 以下代码是什么?
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)
}
}
答案 0 :(得分:2)
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(_, _) )
答案 1 :(得分:1)
任何需要函数的地方都可以传递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))
}
现在您的类型兼容,其余代码可以按预期工作。
答案 2 :(得分:0)
(Int, Int) => Int
是Function2[Int, Int, Int]
(一个具有2个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