Dmi*_*yev 4 clojure environment-variables leiningen
我有这段代码:
(def heavy_computation (f1 (env :var1)))
Run Code Online (Sandbox Code Playgroud)
在哪里(env :var1)获取指向目录位置的环境变量VAR1(在environ的帮助下)并且f1是Java函数的包装器.稍后在函数中使用它,我只想计算一次计算量很大.
我希望能够VAR1在生产中缺少自定义和打印错误消息.
如果我在lein uberjar没有环境变量的情况下编译此代码,则会NullPointerException在此行引发错误.
我可以用环境变量编译它,稍后如果我适当地设置它们,它将起作用.为了在错误消息的情况下打印我的错误消息,我必须在def语句之前放置检查它的代码,否则它会抛出空指针异常.
我能以更干净的方式做到吗?我不想设置环境变量来编译它,我想-main在启动服务器之前放置在函数中执行检查的代码.
一种选择是将评估包装在delay:
(def heavy-computation (delay (f1 (env :var1))))
Run Code Online (Sandbox Code Playgroud)
那么无论你需要的结果,你可以deref/ @延迟:
(when (= :ok @heavy-computation)
(println "heavy!"))
Run Code Online (Sandbox Code Playgroud)
该delay的身体只会计算一次,而不是直到你取消对它的引用.
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |