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

问题描述 投票:0回答:2

我是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来实现这一点

scala functional-programming
2个回答
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
投票

你可以在函数中使用几个参数列表:

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)



}
© www.soinside.com 2019 - 2024. All rights reserved.