2016-02-01 4 views
1

При выполнении этой функции при запуске lein программа выполняется, как ожидалось. Но я пытаюсь выполнить пакет proto-repl atom.io, и когда я вызываю функцию с использованием proto-repl, она дает «CompilerException java.lang.RuntimeException: не удается разрешить символ: can-vote в этом контексте». Вот моя функция:Clojure REPL Невозможно разрешить символ

(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

+0

(ns clojure-noob.core (: gen-class)) Таким образом, я выделяю всю функцию в левой части редактора, proto-repl справа обновляет пространство имен ядра clojure-noob, но когда Я пытаюсь вызвать функцию после этого, чтобы наблюдать, как она выполняется, она выдает это исключение. –

+0

Если я вставляю функцию непосредственно в REPL, она, похоже, выполняется, но не позволяет мне вводить текст в приглашении при вызове функции (можно голосовать) –

ответ

7

Когда начинается ваш 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.