Clojure 轮询文件以进行更改?
通常,我希望轮询文件以进行更改(上次编写文件时)。当文件确实改变了以前的值时,我希望执行一些函数。某种形式的Clojure 轮询文件以进行更改?,clojure,Clojure,通常,我希望轮询文件以进行更改(上次编写文件时)。当文件确实改变了以前的值时,我希望执行一些函数。某种形式的 (poll-for-changes file-str on-change-fx current-value) 在哪里 file str只是一个指定文件位置的字符串 on change fx是当file str中的文件更改时应调用的函数。假设changefx上的应该将指向File str的File对象作为参数 当前值文件的当前值(以毫秒为单位)。您可以设置为0以保证此函数至少运行一次,或
(poll-for-changes file-str on-change-fx current-value)
在哪里
file str
只是一个指定文件位置的字符串on change fx
是当file str
中的文件更改时应调用的函数。假设changefx上的应该将指向File str
的File对象作为参数
当前值
文件的当前值(以毫秒为单位)。您可以设置为0以保证此函数至少运行一次,或者设置为实际值以仅在实际检测到更改时运行此函数我只希望这个函数能够以最清晰、最简洁、尽可能简洁的方式实现。谢谢。这里您可以使用两种方法:
我认为选项1是最好的选择,函数的实现应该是直接的。您可能希望使用
doto
和->
和->
宏来提高代码的可读性。如果您希望轮询一个目录或文件并对其执行操作,我认为这是非常好的选择
Java7有一个WatchService,它使用文件系统事件来响应更改。在这种情况下,您根本不进行轮询,而是阻止将来的文件事件。我不认为Clojure中有任何项目可以利用它,尽管我花了一些时间来玩弄它来写一篇文章。它的来源是什么
我甚至不认为我的库是完整的,但它确实使用了Java 7服务,因此您可以在自己的项目中使用它作为灵感。现在我可能会先尝试一下 否则,有许多替代方案(如
hara
docs中所述):
hara
所做的事情并包装