gpt4 book ai didi

clojure - Clojure 中 `def` 语句中使用的环境变量

转载 作者:行者123 更新时间:2023-12-04 22:55:07 24 4
gpt4 key购买 nike

我有这段代码:

(def heavy_computation (f1 (env :var1)))

哪里 (env :var1)正在获取环境变量 VAR1 (在 environ 的帮助下)指向目录位置和 f1是 Java 函数的包装器。这稍后会在函数中使用,而且我只想计算一次,这是一项繁重的计算。

我希望能够自定义 VAR1如果在生产中丢失,则打印错误消息。

如果我编译此代码 lein uberjar如果没有环境变量,它会抛出关于 NullPointerException 的错误在这一行。

我可以使用环境变量编译它,稍后如果我适本地设置它们,它将起作用。为了在错误信息丢失时打印我的错误信息,我必须将检查它的代码放在 def 之前。语句,否则抛出空指针异常。

我可以用更干净的方式来做吗?我不想设置环境变量来编译它,我想把执行检查的代码放在 -main 中。在它启动服务器之前运行。

最佳答案

一种选择是将评估包装在 delay 中:

(def heavy-computation (delay (f1 (env :var1))))

那么无论你在哪里需要结果,你都可以 deref/ @延迟:
(when (= :ok @heavy-computation)
(println "heavy!"))
delay的 body 只会被评估一次,直到你取消引用它。

关于clojure - Clojure 中 `def` 语句中使用的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51692497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com