Clojure REPL Не удалось разрешить символ

При выполнении этой функции из lein run программа выполняется так, как ожидалось. Но я пробую пакет proto-repl от atom.io, и когда я вызываю функцию с помощью 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")))

person Mahmud Adam    schedule 01.02.2016    source источник
comment
В каком пространстве имен определена эта функция?   -  person Josh    schedule 01.02.2016
comment
(ns clojure-noob.core (:gen-class)) Итак, я выделяю всю функцию на левой панели редактора, proto-repl справа обновляет пространство имен ядра clojure-noob, но когда я пытаюсь вызвать после этого функция, чтобы посмотреть, как она выполняется, выдает это исключение.   -  person Mahmud Adam    schedule 01.02.2016
comment
Если я вставляю функцию непосредственно в REPL, она, кажется, выполняется, но не позволяет мне вводить какой-либо текст в приглашении при вызове функции (можно проголосовать).   -  person Mahmud Adam    schedule 01.02.2016
comment
Это другая проблема, см. здесь -> stackoverflow.com/questions/7707558/   -  person Josh    schedule 01.02.2016


Ответы (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

Вы можете прочитать гораздо больше о пространствах имен и вызове функций из других пространств имен и библиотек здесь.

person Josh    schedule 01.02.2016
comment
Спасибо. 2 последовательных учебника по Clojure отказались делиться этой информацией, и я был заблокирован. - person jeremyjjbrown; 17.06.2018