我遇到了一个clojure代码的问题,我不明白这里发生了什么.
码:
(defn -main []
(clean-bucket-if-limit)
(do-something-1)
(do-something-2)
(do-something-3))
(defn clean-bucket-if-limit
[]
(let [objects (get (s3/list-objects cred "deske") :objects)]
(let [number (count objects)]
(if (> 3 number)
(map delete-file-s3 objects)
(println "no limit")))))
(defn delete-file-s3
[object]
(let [key (get object :key)]
(s3/delete-object cred "bucket-name" key)))
Run Code Online (Sandbox Code Playgroud)
问题是当我只执行clean-bucket-if-limit(在REPL上)时,一切都运行良好,但是当我使用main函数时(文件没有被删除).
ama*_*loy 10
map是懒惰的.当你运行时(map delete xs),你会立即得到一个懒惰的序列,直到你通过从它请求元素来强制序列,才会实际完成任何工作.在repl处,序列在打印到屏幕时被强制执行.但是当你运行你的程序时,-main返回void,只是丢弃它收到的值,导致什么都没有实现.如果您想迭代序列以获得副作用,您应该使用doseq或者使用dorun其他一些副作用序列函数,而不仅仅是map.
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |