所以,我的问题是我是否可以在我的程序需要执行的特定操作中避免可变状态。
一些背景:大约一周前,我决定学习使用 Clojure 编程,自学函数式编程。(白天我是一名主要使用 C# 的 Web 开发人员。
因此,根据我的经验,学习一门语言的最佳方式是从一个项目开始。无论如何,我选择创建我需要的东西,一个小工具,用于从 XML 文件中读取文本片段,然后在其他文本文件中进行一些查找和替换(并检测不一致。
所以我已经完成了将文件解析为我需要的地图列表的部分,这就是问题所在:按照我的看法,我可以在函数之间尽可能多地传递我的数据,在在某些时候,我的程序没有什么可做的。然后当用户单击 (javax.swing-button) 时,我的程序将忘记所有内容。
函数式程序员将如何解决这个问题?
我想出的可能的解决方案:
-单子。(非常适合构建复杂性,但在功能停止执行时仍然会消失。
- 每次用户单击按钮时再次从磁盘读取文件:看起来很傻。
- 将我的文件内容存储在我的表单控件中。似乎是在作弊(而且也是错误的。
- 解析文件时,创建一个包含对结果数据结构的引用的闭包,并将其安装到新的事件处理程序中:看起来像是作弊,通常只是一个奇怪(但有趣)的尝试。
谁能告诉我我是否正确地将其识别为没有 ^dynamic var 就无法做到的情况?
任何指针将不胜感激。)))))
编辑:我不是要代码示例,只是一个是或否的答案,也许是关于下一步要查找什么的提示,问题是:有没有办法让 clojure 程序记住它计算的一些数据,处于空闲状态(直到下一个 java 事件处理程序被触发),而不使用全局变量、原子、引用或代理?
我问的原因是我想以正确的方式学习以功能样式进行编程,并且我基本上是在检查我是否不会偏离轨道。
感谢迄今为止所有有用的回复,肯定有阅读书籍的提示,这总是很好。