在部分初始化对象之后使用命名参数

时间:2018-09-06 10:33:41

标签: scala functional-programming

我对Scala还是很陌生,因此,如果以下某些术语错误,我们深表歉意。我有一个带有2个参数列表的案例类,说:

case class MyClass(a : Int, b : Int)(c: Int, d : Int, ... many others)

我想定义一个函数,该函数返回部分初始化的实例,其中仅提供了第一组参数:

def buildPartial() : **something** = {
    MyClass(1, 2)
}

buildPartial完成工作后,我想在提供其余参数时能够使用命名参数。

val fullyPopulated = buildPartial()(c = 3, d = 4, ...)  

这有可能吗,如果可以,我如何声明buildPartial来实现这一目标

2 个答案:

答案 0 :(得分:2)

您无法创建部分初始化的类,因此您将需要定义一个包含部分数据的第二个类(我将其称为MyPartialClass)。向此类添加apply方法可以轻松创建MyClass

的完整实例。
case class MyClass(a: Int, b: Int, c: Int, d: Int, e: Int)

case class MyPartialClass(a: Int, b: Int) {
  def apply(c: Int, d: Int, e: Int) = MyClass(a, b, c, d, e)
}

val partial = MyPartialClass(1, 2)
val full: MyClass = partial(d=4, c=3, e=5)

答案 1 :(得分:-1)

您可以在函数中使用多个参数列表:

case class C(a: Int)(b: Int)(c: Int)


object O{

  def buildP()(b: Int, c: Int) = C(1)(b)(c)

  val c = buildP()(c = 2, b = 1)



}