Я пытаюсь реализовать обратные вызовы в opa, поэтому, когда переменная обновляется на стороне сервера, клиенты немедленно получают это обновленное значение.
Я знаю, что могу сделать это с сетью:
Network.add_callback(update_function, room)
однако в качестве учебного упражнения я хотел бы реализовать эту функцию самостоятельно.
Моей первой мыслью было создать список void->void
функций list(void->void)
, и именно здесь я столкнулся со своей первой проблемой в отсутствии изменяемого состояния и переменных. Поэтому я не могу добавить какие-либо функции обратного вызова в созданный список.
Это приводит меня к моему первому вопросу: как мне работать без изменяемого состояния? Я не считаю себя новичком в функциональном программировании, но обычно я просто переназначаю переменную
i.e.
x = ['a','b','c']
function addVal(val){
x = List.add(val,x)
}
Но это не кажется законным в опа.
Как можно работать без переменных или изменяемых структур данных? Я не понимаю, как любой динамический контент может быть реализован без изменяемого состояния.
Я решил попытаться обойти проблему, сохранив свой список функций обратного вызова в базе данных:
database callbacks{
list(void -> void) functions
}
но я получаю ошибку
Elements of type void -> void cannot be stored in the database
Что приводит меня ко второму вопросу:
Есть ли лучшие ресурсы для opa, чем doc.opalang.org? Мне не удалось найти никакой информации о типах, разрешенных в базе данных.
Итак, вкратце:
- Как мне создать программу, которая действительно что-то делает без использования изменяемого состояния или переменных?
- Какие типы разрешены в OPAP-базах?
- Есть ли какие-нибудь полезные ресурсы для opa, кроме doc.opalang.org?