从Vector初始化case类

时间:2014-03-19 14:58:23

标签: scala

我想从值向量初始化一个case类或普通类。

示例代码我现在看起来像这样:

class P(parameters : Vector[String]) {
   val a: String = parameters(0)
   val b: String = parameters(1)
   val c: String = parameters(2)
}

我用

初始化它
P(Vector[String]("1", "2", "3"))

但如果我能有一个案例类会更好:

case class P (a: String, b: String, c: String)

并且仍然能够使用给定的向量初始化它 - 不必通过构造函数进行初始化。另外,我想支持Vector的元素少于要创建的对象的情况:

P(Vector[String]("1"))

我正在寻找一种scala方式来做到这一点。

2 个答案:

答案 0 :(得分:1)

您可以在案例类中定义其他构造函数:

case class P(a: String, b: String, c: String) {
  def this(parameters: Vector[String]) =
    this(parameters(0), parameters(1), parameters(2))
}

如果您使用包含少于三个元素的Vector来调用此内容,会发生什么?

答案 1 :(得分:1)

据我所知你正在寻找这样的东西:

case class P (a: String, b: String, c: String)
object P {
  def apply(v: Vector[String]): P = {
    //your code to create P, probably
    P(v(0), v(1), v(2))
  }
}