【发布时间】:2015-12-14 16:43:42
【问题描述】:
我正在尝试遍历给定目录中的文件列表,并将递增变量 i = {1,2,3.....} 添加到它们的名称中。
这是我用于遍历文件并更改每个文件名的代码:
(defn addCounterToExtIn [d]
(def i 0)
(doseq [f (.listFiles (file d)) ] ; make a sequence of all files in d
(if (and (not (.isDirectory f)) ; if file is not a directry and
(= '(\. \i \n) (take-last 3 (.getName f))) ) ; if it ends with .in
(fs/rename f (str d '/ i (.getName f)))))) ; add i to start of its name
我不知道如何在doseq 迭代每个文件时增加i。或者,是否有更好的循环来达到预期的结果?
【问题讨论】:
-
你为什么要让变量的范围超出它的操作范围?
-
def创建一个*var正如 Charles Duffy 指出的那样,这是一个超出函数运行范围的*值,更重要的是,如果这样做通常是错误的你想要突变。此外,clojure 中惯用的做法是完全消除突变的直接使用(如下面的回答所示)。 -
谢谢您的解释
-
您可能会发现这段代码很有帮助:paste.ubuntu.com/6981825
标签: clojure