是否可以在scala中的部分函数中传递多个参数来返回某些内容?

时间:2016-07-28 18:17:30

标签: scala

我有兴趣知道Scala中的部分函数是否可以接受多个参数转换,例如

val test: PartialFunction[Int, Boolean, String] = { case d: Int if d > 0 => "one" }

test(0, true)

这里我想传入一个int和一个布尔值,以便它可以将它重新计算成一个字符串,这可能吗?

2 个答案:

答案 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))

根据这个例子,元组会更有意义。但也许它会使你的应用程序的设计受益。