Clojure错误:无法在此上下文中解析符号:更新
这是我从本网站另一篇帖子的答案中复制的代码:Clojure错误:无法在此上下文中解析符号:更新,clojure,Clojure,这是我从本网站另一篇帖子的答案中复制的代码: (def data [[1 1 1 3] [2 2 2 3] [3 2 1 1] [4 3 3 4]]) (def replacements {1 "joe" 2 "fred" 3 "martha"}) (defn test [] (mapv (fn [row] (update row 1 replacements)) data) ) 当我在REPL中调用(test)时,它显示以下错误: CompilerException java.la
(def data [[1 1 1 3] [2 2 2 3] [3 2 1 1] [4 3 3 4]])
(def replacements {1 "joe" 2 "fred" 3 "martha"})
(defn test
[]
(mapv (fn [row] (update row 1 replacements)) data)
)
当我在REPL中调用(test)时,它显示以下错误:
CompilerException java.lang.RuntimeException:无法在此上下文中解析符号:更新
为什么Clojure不知道更新功能?尝试重新启动repl。当我尝试它时,它会起作用:
(def data [[1 1 1 3] [2 2 2 3] [3 2 1 1] [4 3 3 4]])
(def replacements {1 "joe" 2 "fred" 3 "martha"})
(defn test []
(mapv (fn [row] (update row 1 replacements)) data) )
(test) => [[1 "joe" 1 3] [2 "fred" 2 3] [3 "fred" 1 1] [4 "martha" 3 4]]
另一个选项(我最喜欢的)是在临时测试名称空间(例如,tst.demo.core
)中处理这样的代码,这样您就可以使用完整的编辑器,并且更容易确保正确加载/重新加载所有内容
我还强烈推荐lein测试刷新
另一个选项是创建一个新的空目录并在其中启动repl:
~/expr > mkdir sally
~/expr > cd sally
~/expr/sally > lein repl
user=> (def data [[1 1 1 3] [2 2 2 3] [3 2 1 1] [4 3 3 4]])
#'user/data
user=> (def replacements {1 "joe" 2 "fred" 3 "martha"})
#'user/replacements
user=> (defn test []
#_=> (mapv (fn [row] (update row 1 replacements)) data) )
WARNING: test already refers to: #'clojure.core/test in namespace: user, being replaced by: #'user/test
#'user/test
user=> (test)
[[1 "joe" 1 3] [2 "fred" 2 3] [3 "fred" 1 1] [4 "martha" 3 4]]
更新
请注意,在Clojure中,文件名和目录结构必须与每个文件中的命名空间声明相匹配。因此,像
/src/fred/core.clj
这样的文件必须具有像fred.core
这样的命名空间,其中/src
是主项目目录的子目录(其中project.clj
存在)。如果从clojure 1.6或更早版本调用update
,则会出现此错误
update
是在1.7中添加的,在此之前,您必须使用updatein
试试(clojure版本)
,看看你在用什么
(正如cfrick和dpassen在评论中所说的)我重新启动了Eclipse,但它仍然无法工作。这是否与我将a3.core名称空间重命名为(ns a3.menu)有关?很抱歉,如果您没有更改
(ns a3.core…
声明以匹配新文件名,我很可能是个新手;查看更新。检查您使用的Clojure版本。更新是在1.7中添加的,如果您在