【发布时间】:2021-11-27 01:03:09
【问题描述】:
当我使用 lein repl 启动 repl 时,我可以运行函数 greet 并且它按预期工作。
(ns var-test.core
(:gen-class))
(declare ^:dynamic x)
(defn greet []
(binding [x "Hello World."]
(println (load-string "x"))))
(defn -main [& args]
(greet))
但如果通过lein run 运行代码,则会失败
java.lang.RuntimeException: Unable to resolve symbol: x in this context.
我错过了什么?
var x 是否在编译期间被删除,尽管已声明,因为它从未在字符串之外使用?
编辑:
解决方案
@amalloy 的评论帮助我了解我需要绑定 *ns* 才能将字符串加载到预期的命名空间中,而不是新的空命名空间。
这按预期工作:
(ns var-test.core
(:gen-class))
(declare ^:dynamic x)
(defn greet []
(binding [x "Hello World."
*ns* (find-ns 'var-test.core)]
(println (load-string "x"))))
(defn -main [& args]
(greet))
【问题讨论】:
-
在 Stack Overflow 上,回答你自己的问题完全没问题。但请在新的答案中这样做,而不是在编辑您的问题时这样做。 stackoverflow.com/help/self-answer
-
在 SO 上为您的问题添加您自己的答案非常好