Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
How-main在Clojure上的工作方式_Clojure - Fatal编程技术网

How-main在Clojure上的工作方式

How-main在Clojure上的工作方式,clojure,Clojure,我遇到了clojure代码的问题,我不明白这里发生了什么 代码: 问题是,当我执行clean bucket if limit only(在REPL上)时,一切都很好,但当我使用主功能时,一切都没有问题(文件没有被删除)。map是惰性的。当您运行(map delete xs)时,您会立即返回一个惰性序列,在您通过请求元素强制执行序列之前,实际上不会执行任何操作。在repl,当序列被打印到屏幕上时,它被强制执行。但当您真正运行程序时,-main返回void,并丢弃它接收到的值,导致无法实现任何功能。

我遇到了clojure代码的问题,我不明白这里发生了什么

代码:


问题是,当我执行clean bucket if limit only(在REPL上)时,一切都很好,但当我使用主功能时,一切都没有问题(文件没有被删除)。

map
惰性的。当您运行
(map delete xs)
时,您会立即返回一个惰性序列,在您通过请求元素强制执行序列之前,实际上不会执行任何操作。在repl,当序列被打印到屏幕上时,它被强制执行。但当您真正运行程序时,
-main
返回void,并丢弃它接收到的值,导致无法实现任何功能。如果您想在序列上迭代产生副作用,而不仅仅是
map

,您应该使用
doseq
dorun
或其他一些副作用序列函数,您确定
-main
正在运行吗?正在执行
执行操作-
函数吗?当
-main
运行
如果limit
清理桶时,
(计数对象)
的值是多少?如果需要,您可以在代码中添加
println
语句来检查这一点。如果限制为,您的-main是否在清理桶后定义?良好点Shlomi。或者
声明
中列出了限制,那么
是否清洁桶?@Shlomi yes,-main在后面定义。@elf,那很好,我还发现amalloy正确回答了你的问题。我建议你在以后的问题中保持代码的正确顺序,这样我们就不会被误导了。
(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)))