首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clojure.test无法解析“from”中的符号。在REPL和lein运行中工作

clojure.test无法解析“from”中的符号。在REPL和lein运行中工作
EN

Stack Overflow用户
提问于 2014-07-17 14:42:06
回答 1查看 1.1K关注 0票数 5

请容忍这个人为的例子,但这是我能想到的最简单的事情来重现这个问题。

代码语言:javascript
复制
(ns something.core)

(defn call-foo [something & args]
  (let [a-foo (:foo (eval (:quux something)))]
    (apply a-foo args)))

(def Something {
  :foo (fn [& args] args)
  :bar (fn [something] (call-foo something))
})

(defn make-something []
  {:quux 'Something})

在REPL中或在lein run中运行以下内容很好。

代码语言:javascript
复制
(let [subject (make-something)                      
      actual (call-foo subject "hello" "greetings")]
  (println actual))                                 
;;=> (hello greetings)

此问题仅在此测试和执行lein test期间发生。

代码语言:javascript
复制
(ns something.core-test
  (:require [clojure.test :refer :all]
            [something.core :refer :all]))

(deftest a-test
  (let [subject (make-something)
        actual  (call-foo subject "hello" "greetings")]
    (is (= ["hello" "greetings"] actual))))

这会引发一个错误。一个示例输出:

代码语言:javascript
复制
ERROR in (a-test) (Compiler.java:6464)
Uncaught exception, not in assertion.
expected: nil
  actual: clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: Unable to resolve symbol: Something in this context, compiling:(/private/var/folders/0n/c7q7860j34xfc2r1x4q51jrh0000gn/T/form-init9215140948330409114.clj:1:6436)

“无法解析符号:上下文中的某些内容”这一行使我认为Something由于某种原因不在上下文中,而我在call-foo中使用。但为什么只有在测试中才会出现这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-17 15:49:30

问题是eval没有看到上下文。您的'Somethingsomething.coresomething.core-test中解析,因为您已经引用了所有内容。它不会从lein test运行其测试的任何名称空间解析。

修复当前问题的更改

代码语言:javascript
复制
'Something

代码语言:javascript
复制
`Something

所以它是命名空间限定的。然后测试将运行(并失败),但这是另一个问题(println返回nil )。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24806608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档