繁体   English   中英

Main如何在Clojure上工作

[英]How -main works on Clojure

我对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)))

问题是,当我仅执行clean-bucket-if-limit(在REPL上)时,一切正常,但是当我不使用main函数时(文件未删除)。

map 很懒 运行(map delete xs) ,您立即返回一个惰性序列,并且直到您通过从序列中请求元素来强制序列之前,实际上并没有完成任何工作。 在替换时,将序列打印到屏幕时会强制执行。 但是,当您实际运行程序时, -main返回void,并且仅丢弃其收到的值,从而使任何事情都无法实现。 如果您要遍历序列的副作用而不是map ,则应该使用doseqdorun或其他一些副作用序列函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM