Работа с программированием, управляемым событиями, в Clojure/ClojureScript

Я пытаюсь понять, как моделировать события в ClojureScript. Спроектировать очередь событий в JavaScript очень просто. Вы просто сохраняете (изменяемый) массив функций и предоставляете вспомогательные функции для добавления или удаления обратных вызовов из массива. Когда вы инициируете событие, просто просмотрите все обратные вызовы, перечисленные в массиве, и вызовите их один за другим.

Эта парадигма далека от функционального стиля — например, нет смысла запускать обратные вызовы, если они не имеют побочных эффектов. Более того, это реализовано с использованием изменяемого массива. Тем не менее мне кажется, что в ClojureScript нужно уметь программировать, управляемое событиями, чтобы делать что-то полезное.Теперь я знаю, что Google Closure уже реализует библиотеку событий, но мой вопрос касается ее реализации изначально.

Поскольку все основные типы данных Clojure/ClojureScript являются неизменяемыми, каким идиоматическим способом можно было бы реализовать этот механизм? Сменить реферала? Прибегаете к изменяемым структурам данных с хоста (Java или JavaScript)?

Если я правильно понимаю, агенты, возможно, являются правильным инструментом в Clojure, но я вижу, что в настоящее время они не реализованы в ClojureScript.

7
задан Andrea 1 April 2012 в 22:06
поделиться