Я экспериментировал с созданием платформы функционального реактивного программирования для Scala . В настоящий момент меня смущает то, как современные реализации имеют дело с представлением поведения на верхнем уровне. Чтобы объяснить, что я имею в виду, приведу пример. Скажем, у меня есть JPanel, и я хочу сделать это:
JPanel panel = new Panel()
panel.setBackground(new Behaviour(time => Color.red))
Хотя цвет здесь статический, мы хотим, чтобы фон панели обновлялся при обновлении значения Поведения. До сих пор я делал это, по существу, создавая дискретизированное поведение, используя события (доступные через функцию changes
в поведении). По сути, это просто источник событий, который происходит всякий раз, когда изменяется поведение. Используя эту реализацию setBackground здесь будет:
def setBackground(color : Behaviour[Color]) {
super.setBackground(color.now)
color.changes.each(change => super.setBackground(change))
}
Это выглядит немного грязно. У кого-нибудь есть предложения о том, что это плохой подход или нет? Сегодня я смотрел на Push-Pull FRP Эллиотта , и мне кажется, что я могу идти в правильном направлении, но где-то теряюсь.
РЕДАКТИРОВАТЬ: Если ни у кого нет определенного четкого решения, то идеи / мысли были бы великолепны!