Scala:如何在部分函数中定义具有默认值的参数

时间:2015-05-29 10:51:04

标签: scala

鉴于以下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和一个采用默认值参数的方法......但它并不完全是我正在寻找的。还有更好的选择吗?

2 个答案:

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