【发布时间】:2020-04-07 09:49:08
【问题描述】:
我有一个这样的案例类:
case class Metric(name: String, value: Double, timeStamp: Int)
我收到单独的组件以在单独的列表中构建指标并将它们压缩以创建指标对象列表。
def buildMetric(names: Seq[String], values: Seq[Double], ts: Seq[Int]): Seq[Metric] = {
(names, values, ts).zipped.toList map {
case (name, value, time) => Metric(name, value, time)
}
}
现在我需要为 buildMetric 函数和 Metric 类添加一个可选参数。
case class Metric(name: String, value: Double, timeStamp: Int, type: Option[Type])
&
def buildMetric(names: Seq[String], values: Seq[Double], ts: Seq[Int], types: Option[Seq[Type]]): Seq[Metric]
这个想法是我们有时会收到一个类型的序列,如果存在的话,它与名称和值列表的长度相匹配。我不确定如何修改 buildMetric 函数的主体以惯用地创建具有类型信息的 Metric 对象。我可以想到几种方法。
在
types.isDefined上执行 if-else,然后使用types.get压缩类型,在一种情况下使用另一个列表,在另一种情况下保持如上。这让我写了两次相同的代码。另一种选择是简单地使用 while 循环并创建一个 Metric 对象,
types.map(_(i))传递了最后一个参数。
到目前为止,我使用的是第二个选项,但我想知道是否有更实用的方法来处理这个问题。
【问题讨论】:
标签: scala functional-programming