gpt4 book ai didi

clojure - 从 clojure 中动态创建的命名空间中查找变量

转载 作者:行者123 更新时间:2023-12-01 05:45:05 24 4
gpt4 key购买 nike

以下测试失败:

(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(我刚刚创建的 var,在我刚刚创建的命名空间中)返回 nil。这种行为不会发生在 repl 中,在那里输入测试的步骤工作得很好。

我做错了什么,或者这只是现在在 clojure 中不起作用的东西?

最佳答案

与我原来的答案形成鲜明对比的是,更新到了一个似乎真的能达到预期目的的版本......

这个版本似乎有效:

(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 ,正如预期的那样。

关于clojure - 从 clojure 中动态创建的命名空间中查找变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2878826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com