我已经开始在 Clojure 中开发一个国际象棋游戏,但是我的命名空间有问题。在我的文件顶部,我有
(ns chess.core
(:require clojure.contrib.str-utils2))
并且还定义了几个函数,包括to-string
,它将游戏块的符号转换为字符串。但是,当我编译时:
core.clj:21:8:
error: java.lang.Exception: Unable to resolve symbol: to-string in this context (core.clj:21)
我做了一些实验,发现第一次调用我自己定义的函数时出现错误。我还发现,如果我注释掉调用,我通常不会收到错误消息。ns
有时可以通过重新启动 Swank 服务器来修复(有时不能)。有一段时间我刚刚遇到(ns chess.core)
了同样的错误,所以我将其注释掉并继续破解。但是现在我需要大写一些东西,所以我需要 str-utils。
说到 str-utils,我使用 Leiningen,并且在下面有以下project.clj
内容:dependencies
:
[org.clojars.jhowarth/clojure-contrib "1.2.0-RC3"]]
; [clojure.contrib.str-utils2 "1.2.1"]]
上面的有效,下面的无效。
所以我觉得我对 Clojure 命名空间和库的工作原理一无所知,但与此同时,其他所有人似乎都在(ns foo.bar)
成功使用。