我感興趣的知道,如果在Scala中的部分功能可以接受多個參數設置爲變換,如是否有可能通過scala中的部分函數傳遞多個參數來返回某些內容?
val test: PartialFunction[Int, Boolean, String] = { case d: Int if d > 0 => "one" }
test(0, true)
在這裏,我想在一個int和一個布爾值傳遞,因此它可以重新評估它成一個字符串,這可能嗎?
我感興趣的知道,如果在Scala中的部分功能可以接受多個參數設置爲變換,如是否有可能通過scala中的部分函數傳遞多個參數來返回某些內容?
val test: PartialFunction[Int, Boolean, String] = { case d: Int if d > 0 => "one" }
test(0, true)
在這裏,我想在一個int和一個布爾值傳遞,因此它可以重新評估它成一個字符串,這可能嗎?
正如在評論中提到@alextsc,使用元組作爲函數的輸入類型:
val test: PartialFunction[(Int, Boolean), String] = {
case (d, b) if (d > 0) && b => "one"
}
test((0, true)) // or test(0 -> true)
您可以縮放這出(幾乎)通過使用更高的元數元組類型的任何數量的參數:
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))
如果您看一下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))
根據這個例子,Tuple會更有意義。但也許它會讓你的應用程序的設計受益。
一種選擇是使用元組'(Int,Boolean)'。 – alextsc