Clojure符号评估错误
-
28-10-2019 - |
题
所以我目前有以下代码: 通用标签
在Emacs中执行C-c C-k
之后,得到以下输出:
通用标签
但是当我执行lein uberjar
并运行生成的jar文件时,出现错误:
通用标签
所以我有两个问题:
- 为什么uberjar的功能与REPL完全不同?
- 如何解决此问题?
解决方案
1。为什么uberjar的功能与REPL不同?
导致错误“ NO_SOURCE_PATH”的原因是您当前不在定义“ foo”的命名空间中。
为了说明:如果我在REPL中评估您的代码并执行它,它会像您期望的那样将我置于contact-form.core
命名空间中,因为(ns contact-form.core)
是由REPL评估的,但是如果我切换到user
命名空间并调用-main
,我可以产生相同的错误:
通用标签
因此,通过将您的generaodicetagcode的入口指定为独立的uberjar执行(在REPL之外),这等效于从jar的默认命名空间main
中调用(contact-form.core/-main)
,因为clojure.core
尚未被评估。结果:(ns contact-form.core
可以使用函数的完全限定(命名空间)路径执行,但是main
中的所有符号在当前默认名称空间中均不可用。
2。修复
解决方案是先显式切换到您的命名空间。 通用标签
不隶属于 StackOverflow