Поиск переменных из динамически создаваемых пространств имен в ближайшем будущем - PullRequest
4 голосов
/ 21 мая 2010

Следующий тест не пройден:

(ns clojure_refactoring.rename-fn-test
  (:use clojure.test))

(deftest test-fn-location
  (in-ns 'refactoring-test-fn-rename)
  (clojure.core/refer-clojure)
  (defn a [b] (inc b))
  (in-ns 'clojure_refactoring.rename-fn-test)
  (is (not= (find-var 'refactoring-test-fn-rename/a)
        nil))
  (remove-ns 'refactoring-test-fn-rename))

То есть find-var (из только что созданной переменной в только что созданном пространстве имен) возвращает nil. Такое поведение не происходит в repl, где печатание шагов теста работает просто отлично.

Я что-то не так делаю или это просто что-то, что сейчас не работает в clojure?

1 Ответ

1 голос
/ 21 мая 2010

Обновлен до версии, которая действительно, кажется, делает то, что задумал, в отличие от моего первоначального ответа ...

Эта версия, кажется, работает:

(ns clojure-refactoring.rename-fn-test
  (:use clojure.test
        [clojure.contrib.with-ns :only [with-ns]]))

(deftest test-fn-location
  (create-ns 'refactoring-test-fn-rename)
  (with-ns 'refactoring-test-fn-rename
    (clojure.core/refer-clojure)
    (defn a [b] (inc b)))
  (is (not= (find-var 'refactoring-test-fn-rename/a)
        nil))
  (remove-ns 'refactoring-test-fn-rename))

Кроме того, вам действительно нужно изменить все вхождения _ в именах пространства имен на -, и наоборот для имен файлов.

С этими изменениями тест проходит нормально для меня. ( Я даже не пытался запустить его По-видимому, он все еще работает без внесения изменений _ / -, но на самом деле, вам нужно это сделать! работать, если ты не следуешь ему.)

По какой-то причине код из вопроса, по-видимому, создавал Var a в пространстве имен, в котором определялся тест, поэтому (find-var 'clojure-refactoring.rename-fn-test/a) возвращал Var, тогда как тест не удался. С учетом вышеизложенного, (find-var 'clojure-refactoring.rename-fn-test/a) возвращает nil, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...