У меня есть такой класс дел:
case class Metric(name: String, value: Double, timeStamp: Int)
Я получаю отдельные компоненты для построения метрик в отдельных списках и архивирую их для создания списка объектов Metri c.
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)
}
}
Теперь мне нужно добавить необязательный параметр как для функции buildMetri c, так и для класса Metri c.
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]
Идея в том, что мы некоторые времена получают последовательность типа, которая, если присутствует, соответствует длине списков имен и значений. Я не уверен, как изменить тело функции buildMetri c для создания объектов Metri c с идиоматической информацией о типе. Я могу придумать пару подходов.
Выполните if-else на types.isDefined
, а затем заархивируйте типы с помощью types.get
с другим списком в одном условии и оставьте, как указано выше, в другой. Это заставляет меня писать один и тот же код дважды.
Другой вариант - просто использовать while l oop и создать объект Metri c, в котором types.map(_(i))
передан последний параметр .
Пока я использую второй вариант, но мне интересно, есть ли более функциональный способ решения этой проблемы.