Я начал работать над игрой в шахматы в 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)
.