我对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
来实现这一目标
答案 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)
}