Я пытаюсь изучить Scala и стараюсь придерживаться неизменного принципа при создании объектов.
У меня есть класс Scala, определенный как:
class TDay(date: LocalDate, open: Double, high: Double,
low: Double, close: Double, tr1: Double = 0.0, tr14: Double = 0.0)
{
}
Параметры date, open, high, low
и close
- это все значения, которые я знаю во время создания любого экземпляра TDay
, но tr1
и tr14
- это значения, которые должны быть рассчитаны, а tr1
- из open, high, low
и close
и tr14
вычисляются из серии tr1
значений, полученных из других TDay
экземпляров.
Если бы я кодировал это на Java, я бы с удовольствием вычислил значения tr1
и tr14
и поместил бы их в такой же объект. Но если я собираюсь сделать это 'способом Scala', я предполагаю, что мне нужно будет создавать новые TDay
экземпляры каждый раз, когда я хочу вычислить tr1
или tr14
для данного TDay
экземпляра.
Я мог бы перегрузить конструктор TDay
:
def this(tDay: TDay, tr1: Double)
{
this(tDay.date, tDay.open, tDay.high, tDay.low, tDay.close,
tr1, tDay.tr14)
}
Но это означает, что я уже определил конструктор сигнатуры (TDay, Double)
, поэтому не могу перегрузить снова, чтобы установить значение tr14
. На самом деле мой пример здесь упрощен, и у меня есть еще несколько Double
значений, которые мне нужно вычислить и установить каждое из них должно быть выполнено в определенном порядке.
Есть ли чистый способ создания нового экземпляра TDay
, используя значения из уже существующего и устанавливая новое вычисленное значение в то же время, без того, чтобы код становился многословным? Или подход к проблеме требует переосмысления?