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