Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure错误:无法在此上下文中解析符号:更新_Clojure - Fatal编程技术网

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中添加的,如果您在