Допустит, у меня есть структура данных, которая содержит параметризованные типы данных:Scala с использованием класса аргумента заполнитель (или входной переменный)
case class Terminal[A](value: A, name: String ="")
Я могу легко создать Terminal[Double]
если я передать его материализованный постоянным :
val terminal = Terminal(2.0)
Однако, я хочу, чтобы быть в состоянии получать (не материализовались) input
, так что я могу оценить терминальные несколько раз с различными контекстами. Я могу достичь простое решение, вызвав value
по имени, т.е.
class Terminal[A](value: => A, name: String ="") {
def getValue = this.value
}
var x = 1.0
val terminal = new Terminal(x)
terminal.getValue // 1.0
x = 100.0
terminal.getValue // 100.0
Однако пользователь этой программы будет иметь инициализацию input
с чем-то вроде var input_x = None
, что не хорошо, а затем изменить его состояние, которое в поворот заставил бы меня превратить value
в Option[A]
Это лучший способ справиться с этой ситуацией? Является ли какой-либо шаблон дизайна или функция scala, которую я мог бы использовать?
Я также могу создать класс Input
для представления этих зависимых от контекста входов, но тогда мне нужно будет многое изменить.
У вас возникли проблемы с попыткой применить конкретное решение проблемы. Беда в том, что вы просите о помощи в реализации своего решения, которое, конечно же, неверно, но никогда не описывайте фактическую проблему, которую вы пытаетесь решить. Я предлагаю вам сделать шаг назад и попытаться описать, почему (как вы думаете) вам нужен этот класс «Терминал» и как его можно использовать в реальной жизни. – Dima