我有兴趣知道Scala中的部分函数是否可以接受多个参数转换,例如
val test: PartialFunction[Int, Boolean, String] = { case d: Int if d > 0 => "one" }
test(0, true)
这里我想传入一个int和一个布尔值,以便它可以将它重新计算成一个字符串,这可能吗?
答案 0 :(得分:1)
正如评论中提到的@alextsc,使用元组作为函数的输入类型:
val test: PartialFunction[(Int, Boolean), String] = {
case (d, b) if (d > 0) && b => "one"
}
test((0, true)) // or test(0 -> true)
您可以使用更高的arity元组类型将其扩展为(几乎)任意数量的参数:
val test4: PartialFunction[(A, B, C, D), String] = {
case (a, b, c, d) => s"$a, $b, $c, $d"
}
test4((new A, new B, new C, new D))
答案 1 :(得分:1)
如果你看一下PartialFunction的目的,那将是没有任何意义的。基本上你在一个匹配案例陈述中隐含地使用了Parital。 正如@Dylan所说,你可以使用Tuple类型,或者你可以使用一个案例类,这对于PartialFunctions来说是件好事。
case class Func3[A,B,C](x:A, y:B, z:C)
val p:PartialFunction[Func3[Int, Int, Int], String] = {
case Func3(a, b, c) => (a+b+c).toString
}
p(Func3(1,2,3))
根据这个例子,元组会更有意义。但也许它会使你的应用程序的设计受益。