Как FRP должен работать на верхнем уровне?

Я экспериментировал с созданием фреймворка функционального реактивного программирования для Scala . На данный момент меня смущает одна вещь: как текущие реализации имеют дело с представлением поведения на верхнем уровне. Чтобы объяснить, что я имею в виду, приведу пример. Скажем, у меня есть JPanel, и я хочу сделать это:

 JPanel panel = new Panel()
 panel.setBackground(new Behaviour(time => Color.red))

Хотя цвет здесь статический, мы хотим, чтобы фон панели обновлялся при обновлении значения Behavior. До сих пор я делал это по существу путем создания дискретного поведения с использованием событий (доступного через функцию changes в поведении). По сути, это просто источник событий, который возникает при изменении поведения. Используя это, реализация setBackground здесь будет выглядеть так:

def setBackground(color : Behaviour[Color]) {
  super.setBackground(color.now)
  color.changes.each(change => super.setBackground(change))
}

Это выглядит немного запутанным. Есть ли у кого-нибудь предложения о том, плохой это подход или нет? Сегодня я смотрел на Эллиотт Push-Pull FRP , и мне показалось, что я, возможно, иду в правильном направлении, но где-то заблудился.

РЕДАКТИРОВАТЬ: Если ни у кого нет определенного четкого решения, тогда идеи / мысли были бы замечательными!

11
задан Conal 17 October 2011 в 17:20
поделиться