是否有一种优雅的方法来调用具有许多参数的构造函数?

时间:2017-10-04 01:27:16

标签: scala

我正在阅读包含许多列的CSV文件,并将每一行转换为一个对象。它是这样的:

  val sighting = Sighting(
    cols(0).toInt,
    cols(1),
    cols(2),
    cols(3),
    cols(4),
    cols(5).toInt,
    cols(6),
    cols(7),
    cols(8),
    cols(9).toDouble
    cols(10),
    cols(11),
    cols(12))

这对我来说非常难看。缺少命名参数(这将是一项改进,被授予),我能做些什么来让它看起来不那么丑陋吗?

2 个答案:

答案 0 :(得分:2)

这个怎么样:

val sighting = cols match { case Seq(c0, c1, c2, ..., c12) => 
  Sighting(c0.toInt, c1, c2, ...)
}

答案 1 :(得分:0)

您可以将丑陋转移到接受Array的构造函数中。我知道这不会降低丑陋程度,但仍然是一个更好的处理方式。

 object Sightings{

   def apply(array: Array[String]): Sightings = new Sightings(array(0), array(1), ...)

 }

然后你可以使用:

 val strings: Array[String] = line.split(",") //split the line and convert it into array of strings
 val sightings: Sightings = Sightings(strings) //create Sighting from the array