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 次 |
最近记录: |