热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何解决Clojure中的“有状态的问题”?

如何解决《如何解决Clojure中的“有状态的问题”?》经验,为你挑选了1个好方法。

我是Clojure的新手,我很难理解一些概念,特别是纯函数和不变性。

我仍然无法理解的一件事是如何在clojure中解决这样的问题:

一个具有登录方法的简单控制台应用程序,用户无法在1分钟的间隔内尝试登录3次以上。

例如,在C#中,我可以在用户每次尝试登录时将UserId和时间戳添加到集合中,然后检查最后一分钟是否有3个以上的尝试。

考虑到我无法更改自己的收藏,我将如何在Clojure中做到这一点?

这不是一个务实的问题(尽管会欢迎一些代码示例),但我想了解您如何解决这样的问题。



1> Carcigenicat..:

在大多数情况下,您不更改对象,而是创建旧对象的新版本:

(loop [attempt-dates []]
  (if (login-is-correct)
    (login)
    (recur (conj attempt-dates (current-date-stamp)))))

在这种情况下,我使用loop。无论我给什么,recur都会传递给的下一个迭代loop。我正在创建一个包含新标记的(conj attempt-dates (current-date-stamp))新列表,然后将其传递到的下一个迭代loop

在大多数情况下,就是这样做的。与其考虑更改对象,不如考虑创建对象的转换后的副本并传递该副本。

如果您确实确实需要可变状态,则可以使用可变atom状态来保存不可变状态:

(def mut-state (atom []))

(swap! mut-state conj 1)

(println @mut-state)  ; Prints [1]

[]在这里仍然是不变的,新版本只是替换了可变atom容器中的旧版本。

除非您需要与UI回调或类似功能进行通信,否则通常通常不需要可变性。练习使用loop/ recurreduce代替。


@ M.Arkk哦,不。“尝试日期”在一次调用“循环”的每次迭代之间进行。如果您正在`loop`内接受请求,那么它将起作用。如果您正在其他地方异步处理请求,则可能会使用“ atom”。
推荐阅读
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 本月初,我们为大家推荐了一系列精选书单,助力大家提升技术水平。月底,我们将介绍几位行业大牛,帮助大家找到人生导师。InfoQ一直致力于为用户提供有价值的资源和支持。 ... [详细]
  • 深入解析Docker镜像的工作机制
    本文旨在深入探讨Docker镜像的内部结构及其工作机制,包括镜像的分层体系、联合文件系统(UnionFS)的应用,以及各层如bootfs和rootfs的具体作用。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 本文将详细介绍Nose这一非标准库的Python测试框架,它虽然不是Python官方发行版的一部分,但与unittest框架紧密相关,旨在通过简化测试流程来提升开发效率。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 烤鸭|本文_Spring之Bean的生命周期详解
    烤鸭|本文_Spring之Bean的生命周期详解 ... [详细]
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
  • 深入解析Spring Boot自动配置机制
    本文旨在深入探讨Spring Boot的自动配置机制,特别是如何利用配置文件进行有效的设置。通过实例分析,如Http编码自动配置,我们将揭示配置项的具体作用及其背后的实现逻辑。 ... [详细]
  • 本文档详细介绍了如何构建和配置 EFKLK(Elasticsearch, Fluentd, Kibana, Kafka)日志采集工具链,包括命名空间创建、Elasticsearch 镜像拉取与容器运行、证书生成及配置、Helm 安装等步骤。 ... [详细]
  • 本文详细探讨了在微服务架构中,使用Feign进行远程调用时出现的请求头丢失问题,并提供了具体的解决方案。重点讨论了单线程和异步调用两种场景下的处理方法。 ... [详细]
  • Eclipse 中 JSP 开发环境配置指南
    本文详细介绍了如何在 Eclipse 集成开发环境中配置 JSP 运行环境,包括必要的软件下载、Tomcat 服务器的配置以及常见问题的解决方法。 ... [详细]
  • 本文详细介绍了Java集合框架中的Collection体系,包括集合的基本概念及其与数组的区别。同时,深入探讨了Comparable和Comparator接口的区别,并分析了各种集合类的底层数据结构。最后,提供了如何根据需求选择合适的集合类的指导。 ... [详细]
  • JESD204C 入门:第2部分新特性及其内容
    本文内容来自ADI的技术文章,作者:DelJones原网址为:https:www.analog.comcnanalog-dialoguea ... [详细]
  • 本文详细介绍了如何正确安装Java EE SDK,并解决在安装过程中可能遇到的问题,特别是关于servlet代码在Apache Tomcat 10中无法运行的情况。 ... [详细]
author-avatar
乌龙小和尚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有