我是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
来实现这一点
您无法创建部分初始化的类,因此您需要定义包含部分数据的第二个类(我称之为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)
你可以在函数中使用几个参数列表:
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)
}