Я внедряю FRP-фреймворк в Scala и, похоже, столкнулся с проблемой.Руководствуясь некоторыми размышлениями, этот вопрос я решил ограничить общедоступным интерфейсом моей платформы, чтобы поведение можно было оценить только в «настоящем», т. Е.
behaviour.at(now)
. Это также соответствует предположению Конала во франции.бумага, в которой Поведения оцениваются / отбираются только в возрастающее время.Он ограничивает преобразования в поведении, но в противном случае мы находимся в огромных проблемах с поведением, которое представляет некоторый ввод:
val slider = Stepper(0, sliderChangeEvent)
При таком поведении оценка будущих значений будет неправильной, а оценка прошлых значений потребует неограниченного количествапамять (все вхождения, используемые в событии «ползунок», должны быть сохранены).
У меня возникли проблемы со спецификацией для операции «моментальный снимок» в поведении с учетом этого ограничения.Моя проблема лучше всего объясняется на примере (с использованием ползунка, упомянутого выше):
val event = mouseB // an event that occurs when the mouse is pressed
val sampler = slider.snapshot(event)
val stepper = Stepper(0, sampler)
Моя проблема здесь в том, что если при выполнении этого кода произошло событие «mouseB», то текущее значение «stepper»'будет последним' образцом 'ползунка (значение во время последнего вхождения).Если время последнего вхождения прошло, то мы в итоге будем оценивать «ползунок», используя прошедшее время, которое нарушает установленное выше правило (и ваше исходное предположение).Я вижу несколько способов решить эту проблему:
- Мы «записываем» прошлое (сохраняем все прошлые события в событии), позволяя оценивать поведение с прошедшими временами (используя неограниченное количествопамять)
- Мы модифицируем «снимок», чтобы принимать аргумент времени («образец после этого времени») и принудительно установить, что это время> = сейчас
- В более дурацком движении мы могли бы ограничить созданиеFRP объектов для начальной настройки программы каким-либо образом и только начать обработку событий / ввода после того, как эта установка завершена
Я также мог бы просто не реализовать 'sample' или удалить 'stepper' / 'switcher'(но я действительно не хочу делать ни одну из этих вещей).У кого-нибудь есть мысли по этому поводу?Я что-то здесь неправильно понял?