Это может быть оксюморон, но как бы обновить объект данных в стиле функционального программирования? Из всего, что я прочитал, функциональное программирование использует преобразования для возврата вывода на неизменяемые объекты. Единственное, о чем я могу думать, это полностью заменить исходный объект, но это похоже на классический подход к обновлению.Обновления функционального стиля
ответ
Вы говорите об объектах базы данных диска или структурах данных в памяти.
Для последних функциональные языки используют постоянные структуры данных, которые реализованы таким образом, что новая версия и старая версия доступны после обновления, но у них общие части (чтобы они были эффективными). Таким образом, вы, кажется, возвращаете совершенно новую структуру данных, но на самом деле она разделяет большую часть своей реализации с той, которую она модифицировала.
Есть некоторые действительно хорошие реализации, чтобы смотреть на в источнике Clojure (написанный на Java) - я взял два из них обособленно на своем блоге
http://www.loufranco.com/blog/files/20-Days-of-Clojure-Day-7.html
http://www.loufranco.com/blog/files/20-Days-of-Clojure-Day-8.html
Короткий ответ заключается в том, что в функциональном стиле каждый объект данных будет неизменным, поэтому обновление - это действительно новый объект данных с обновленным значением, похожий на то, как строки работают в .NET.
Настоящие интересные проблемы возникают при работе с IO, становится сложным моделировать ввод-вывод в чисто функциональном режиме, что приводит к обходным решениям, например, Monads.
Лу Франко Это. Структуры данных на функциональных языках реализованы таким образом, что для их изменения вы полностью замените исходный объект. За кулисами они все еще используют большую часть старого: они просто заменяют измененные биты. Старая версия все еще существует, но сбор мусора уничтожит ее в конце концов, пока никто не ссылается на нее.