scala - 在 FP 中处理 POST 的*正确*方法是什么?

标签 scala post functional-programming web-frameworks

我刚刚开始使用 FP,我正在使用 Scala,这可能不是最好的方法,因为如果事情变得艰难,我总是可以退回到命令式风格。我宁愿不要。我有一个非常具体的问题,指出我对 FP 的理解存在更广泛的空白。

当 Web 应用程序处理 GET 请求时,用户需要网站上已经存在的信息。应用程序只需要以某种方式处理和格式化数据。 FB的方式很明确。

当 Web 应用程序处理 POST 请求时,用户希望更改站点上保存的信息。确实,这些信息通常不保存在应用程序变量中,而是保存在数据库或平面文件中,但是,我仍然觉得我没有正确理解 FP。

是否有处理 FP 语言中静态数据更新的模式?

我对此的模糊描述是应用程序收到请求和当时的站点状态。应用程序做它的事情并返回新的站点状态。如果当前站点状态自应用程序启动以来没有改变,则新状态变为当前状态,并将回复发送回浏览器(这是我对 Clojure 风格的模糊图像);如果当前状态已更改(由另一个线程,好吧,发生其他事情......

最佳答案

在纯 FP 环境中处理此类问题的一种方法是像 Haskell 中的 monad(例如 IO 和 State),但在 Clean 中有“唯一类型”(只允许一个值引用)等替代方法。

这里没有什么可理解的:如果您有可变状态,那么您需要以某种方式限制对它的访问,使该状态的每次更改都被视为程序其余部分的该结构的“新版本” .例如。您可以将 Haskell 的 IO 视为“世界的其他地方”,但附有一种时钟。如果您对 IO 执行某些操作,时钟会滴答作响,并且您再也不会看到相同的 IO。下次你触摸它时,它是另一个 IO,另一个你所做的一切都已经发生的世界。

在现实生活中,您可以“看到”电影中的事物是如何“变化”的——这是必要的观点。但是,如果你拿起胶片,你只会看到一串不可变的小图片,没有任何“变化”的痕迹——这就是 FP View 。这两种观点在它们自己的上下文中都是有效的和“真实的”。

然而,如果你使用 Scala,你 可以 有可变状态 - 这里没问题。 Scala 根本不需要对此进行任何特殊处理,并且使用它没有任何问题(尽管它被认为是“良好的风格”,以保持“不纯”的点尽可能小)。

关于scala - 在 FP 中处理 POST 的*正确*方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676231/

相关文章:

scala - 反转函数的 bool 返回类型

scala - Apache Spark 缓存如何处理具有非线性 DAG 的未缓存文件源?

list - 从 List 中获取前 n 个元素

Spring android 的 iOS 替代品

python - 无法从请求 python 获取完整表

sorting - 功能快速排序是否有可能比命令快速排序运行得更快?

algorithm - 使用递归查找列表的第一个和最后一个元素

scala - java.lang.NoClassDefFoundError : org/apache/flink/streaming/api/scala/StreamExecutionEnvironment 错误

haskell - 没有 monad 转换器的 monad 的显式示例是什么?

web-services - 415 ionic 2 中不支持的媒体类型 - Web 服务 POST?