Clojure REPL无法解析符号

8

当从lein run中执行这个函数时,程序按预期运行。但我正在尝试使用atom.io的proto-repl包,并在使用proto-repl调用函数时出现“CompilerException java.lang.RuntimeException: Unable to resolve symbol: can-vote in this context.”。

以下是我的函数:

(defn can-vote
  []
   (println "Enter age: ")
   (let [age (read-line)]
    (let [new-age (read-string age)]
     (if (< new-age 18) (println "Not old enough")))
      (println "Yay! You can vote")))

1
这个函数定义在哪个命名空间中? - Josh
(ns clojure-noob.core (:gen-class))当我在编辑器的左边窗格中选择整个函数时,右侧的proto-repl会更新到clojure-noob核心命名空间,但是当我尝试调用该函数以观察其执行时,它会抛出此异常。 - Mahmud Adam
如果我直接将函数粘贴到REPL中,它似乎会执行,但在调用(can-vote)函数时不允许我在提示符处输入任何文本。 - Mahmud Adam
那是一个不同的问题,请参见此处-> https://dev59.com/sVzUa4cB1Zd3GeqPzRDG - Josh
1个回答

15

当您的REPL启动时,它可能会将您放在user命名空间中。 您需要将自己移动到clojure-noob.core命名空间或使用完全限定符号调用它。

如果您想切换命名空间

(ns clojure-noob.core) ;; switch to the correct namespace
(can-vote) ;; call the function

如果您希望使用用户命名空间的完全限定符号进行调用

(require 'clojure-noob.core) ;; first require the namespace
(clojure-noob.core/can-vote) ;; call the fully qualified function

你可以在这里阅读更多关于命名空间以及从其他命名空间和库中调用函数的内容。


谢谢。两个连续的Clojure教程都拒绝分享这些信息,我被阻止了。 - jeremyjjbrown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接