【问题标题】:Clojure REPL Unable to resolve symbolClojure REPL 无法解析符号
【发布时间】:2016-02-01 20:04:46
【问题描述】:

当从 lein run 执行这个函数时,程序按预期执行。但是我正在尝试 atom.io 的 proto-repl 包,当我使用 proto-repl 调用该函数时,它会给出“CompilerException java.lang.RuntimeException:无法解析符号:在这种情况下可以投票”。 这是我的功能:

(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")))

【问题讨论】:

  • 这个函数定义在什么命名空间?
  • (ns clojure-noob.core (:gen-class)) 所以我在编辑器的左窗格中突出显示整个函数,右侧的 proto-repl 更新为 clojure-noob core 命名空间,但是当我尝试调用该函数以观察它的执行时,它会抛出此异常。
  • 如果我将函数直接粘贴到 REPL 中,它似乎可以执行,但在调用(can-vote)函数时不允许我在提示符处输入任何文本
  • 这是一个不同的问题,看这里-> stackoverflow.com/questions/7707558/…

标签: clojure runtimeexception


【解决方案1】:

当您的 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

您可以阅读更多关于命名空间和从其他命名空间和库here 调用函数的信息。

【讨论】:

  • 谢谢。连续 2 个 Clojure 教程拒绝分享此信息,我被阻止了。
猜你喜欢
  • 1970-01-01
  • 2012-07-15
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 2015-01-13
  • 2012-02-10
  • 1970-01-01
相关资源
最近更新 更多