#clojure #leiningen
#clojure #leiningen
Вопрос:
Вот мой project.clj
:
(defproject fixurls "0.1.0-SNAPSHOT"
:description "Fixurls"
:url "https://github.com/swizzard/fixurls"
:license {:name "WTFPL"
:url "http://www.wtfpl.net/"}
:dependencies [[org.clojure/clojure "1.5.1"]
[clj-http "0.9.2"]
[org.clojure/data.json "0.2.4"]
[me.raynes/fs "1.4.4"]
]
:plugins [[lein-gorilla "0.2.0"]]
:jvm-opts ["-Xmx4g" "-Xms2g" "-Xss1g" "-server"]
:main ^:skip-aot fixurls.core
)
Вот ~/clojure-stuff/fixurls/src/core.clj
:
(ns fixurls.core
(:require
[clj-http.client :as client]
[clojure.string :as string]
[clojure.java.io :as io]
[me.raynes.fs :as fs]
[clojure.data.json :as json]
)
(:import [java.net URL])
(:gen-class)
)
...
(defn process-file [in-file] (spit (get-fixed-name in-file)
(update-file in-file)))
(defn process-files [] (map process-file valid-files))
(defn -main [] (do (println "Hello, world!") (process-files)))
Когда я запускаю lein run
, все, что происходит после паузы, — это печать Hello, world!
to stdout
, а затем выход lein. Я независимо проверил, что (process-files)
часть -main
не вызывается. Я могу запускать (-main)
из repl, и он работает правильно. Что я делаю не так?
Ответ №1:
map
Функция является ленивой и не гарантирует обработку любого ввода, если не будет получен доступ к соответствующему выводу. Если вы используете map
только для побочных эффектов, завершите его dorun
. Если вам также нужен результат, используйте doall
для принудительной обработки всего ввода.
Комментарии:
1. Это сработало. Спасибо! Думаю, мне все еще нужно разобраться с ленью…