Код запускается в 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. это позволит вам добавить зависимости позже без суеты, если, когда проект достигнет всемирно известного успеха

Другие вопросы по тегам