Код запускается в REPL, но не сохраняется в файле - PullRequest
3 голосов
/ 05 марта 2011

Я пытаюсь создать текстовую игру 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, но если я сохранил код в файл и попыталсяrun:

(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 ]

3 голосов
/ 05 марта 2011

У вас слишком много скобок. Вместо (describe-location(:garden *nodes*)) вы хотите (describe-location :garden *nodes*).

Помните, что имя функции идет после открытия парена, а не раньше: вы вызывали (:garden *nodes*) и затем вызывали describe-location для результата, который не удался, потому что describe-location хочет два аргумента не один.

0 голосов
/ 05 марта 2011

одна потенциальная проблема заключается в том, что версия функции, загруженная в repl в пространстве имен 'user', может не соответствовать ожидаемой вами, поэтому вы можете захотеть (load "wizard-game.clj") в новый REPL. хотя многие люди используют leiningen для этого в наши дни, за исключением большого числа людей, использующих maven напрямую.


сначала дайте вашей игре пространство имен

(ns com.me.myGame ....)

затем вы можете загрузить его в репозиторий, запустив

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

...