Код запускается в REPL, но не сохраняется в файле
Я пытаюсь создать текстовую игру Clojure (по мотивам Land of Lisp).
(def *nodes* {:living-room "you are in the living-room. a wizard is snoring loudly on the couch."
:garden "you are in a beautiful garden. there is a well in front of you."
:attic "you are in the attic. there is a giant welding torch in the corner."})
(defn describe-location [location nodes]
(nodes location))
Код выполняется в REPL, но если я сохранил код в файл и попытался запустить:
(describe-location :attic *nodes*)
Я получил:
Исключение в потоке "main" java.lang.IllegalArgumentException: неверное количество аргументов (1), переданных: user$description-location (wizard-game.clj: 0)
Что я делаю не так?
Вот файл: http://dl.dropbox.com/u/3630641/wizard-game.clj
2 ответа
У вас слишком много скобок. Вместо (describe-location(:garden *nodes*))
, ты хочешь (describe-location :garden *nodes*)
,
Помните, что имя функции идет после открытого имени, а не до: вы звонили (:garden *nodes*)
а потом звонит describe-location
на результат, который потерпел неудачу, потому что describe-location
хочет два аргумента, а не один.
Одна потенциальная проблема заключается в том, что версия функции, загруженная в repl в пространстве имен 'user', может не соответствовать ожидаемой, поэтому вы можете захотеть (load "wizard-game.clj")
в свежий ответ. хотя многие люди используют leiningen для этого в наши дни, за исключением большого числа людей, использующих maven напрямую.
сначала дайте вашей игре пространство имен
(ns com.me.myGame ....)
Затем вы можете загрузить его в Repl, запустив
(use 'com.me.myGame)
и вызывать функции либо по именам, определенным в пространстве имен
(com.me.myGame/describe-location :attic)
или из переключателя repl в это пространство имен:
(in-ns 'com.me.myGame)
(describe-location :attic)
или вы можете использовать leiningen для автоматического создания вашего проекта и пространства имен. В этом случае leiningen стоит того, потому что мне потребовалось больше времени, чтобы написать это предложение, чем создать проект с lein. Есть много хороших учебных пособий для leiningen.
lein new wizard-game
а затем отредактируйте src/wizard-game/core.clj. это позволит вам добавить зависимости позже без суеты, если, когда проект достигнет всемирно известного успеха