0

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)

いくつか実験を行ったところ、自分で定義した関数を初めて呼び出すときにエラーが発生することがわかりました。また、呼び出しをコメントアウトしても、通常はエラーが発生しないことも発見しました。nsSwankサーバーを再起動することで修正できる場合があります(できない場合もあります)。しばらくの間(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)正常に使用しているようです。

4

2 に答える 2

0

関数の使用法を見ずに言うのは難しいですが、、、およびto-stringがどのように機能するかについてのこの説明をチェックしてくださいrequire: http : //blog.8thlight.com/articles/2010/12/6/clojure-libs-and- namespaces-require-use-import-and-ns。これは、私が個人的にライブラリと名前空間について混乱していると感じたものをキャプチャします。nsuse

于 2011-04-20T13:42:57.400 に答える
0

コンパイル時、定義は上から下に評価されます。ファイルで後で定義されている関数を参照すると、そのエラーが発生します。先頭の ns を削除することで、実際には別の名前空間 (おそらく既定のユーザー ns) にある同じ名前の関数を参照していると思います。

関数を最初に使用した場所の上に移動できない場合は(declare to-string)、上部で a を実行して後で定義できます。

str-utils2 パッケージに関しては、すでに clojure-contrib 1.2X にあるはずです。1.3 (未完成) から、contrib は分割されます。http://groups.google.com/group/clojure/msg/c5cdfec990efb6f4を参照してください。

于 2011-04-20T13:31:04.590 に答える