鉴于以下PartialFunction
...
type MyFunc = PartialFunction[(Int, Int), String]
...
val myFunc = MyFunc {
case (i, j) => (i + j).toString
}
...
myFunc(3, 2) // returns "5"
...有没有办法为第二个参数(j
)设置默认值?我到目前为止找到的唯一方法就是:
type MyFunc = PartialFunction[Int, String]
...
def myFunc(j: Int = 10) = MyFunc {
case i => (i + j).toString
}
...
myFunc()(5) // returns "15"
myFunc(5)(2) // returns "7"
上面的解决方案暗示了一个不同的PartialFunction
和一个采用默认值参数的方法......但它并不完全是我正在寻找的。还有更好的选择吗?
答案 0 :(得分:2)
方法可以有默认参数,但函数可以没有。
您的第二个def myFunc
是一种方法(因此它可以包含可选参数),但您无法将其扩展为函数。
def mymethod(j: Int = 10) = MyFunc {
case i => (i + j).toString
}
val asFunc = mymethod _
会丢失默认参数。
如果你想要这样的东西,你需要像
这样的东西type MyFunc = PartialFunction[(Option[Int], Int), String]
val myFunc = MyFunc {
val mydefault = 10
case (i, j) => (i.getOrElse(mydefault) + j).toString
}
并将其称为myfunc((Some(8), 3))
或myfunc((None, 3))
答案 1 :(得分:1)
如果我正确地理解了这个问题,那么这个怎么样?
object WrapperFunc {
val f = PartialFunction[(Int, Int), String] {
case (i,j) => (i + j).toString
}
def apply(a: Int, b: Int = 5) = f (a,b)
}
WrapperFunc(1)
WrapperFunc(1,2)