2014-12-28 5 views
1

Исходя из Haskell, мой обычный рабочий процесс будет :l <file name.hs> на ghci и использовать функции и ADT, которые у меня есть.Clojure REPL и рабочий процесс

Сейчас я использую lein repl в типичном контексте lein new app project. Я создал файл testing.clj рядом с моим core.clj. Там я определил пару функций, протокол и запись, реализующую протокол. Я был в состоянии использовать функцию (use 'testing.testing :reload) проблема заключается в том, что я не в состоянии использовать фактическую запись:

(def c (Something. 0)) 

я получаю:

CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: Something 

Итак, что было бы «лучшим» рабочий процесс в этом случае? Где я не хочу устанавливать функции, протоколы, записи непосредственно на REPL, но также я не хочу полагаться на свой файл core.cls? Я просто хочу файл, где я могу сбросить кучу вещей и поиграть с ним.

PS: Мой окр является Mac OSX Terminal + Sublime

Edit: Через пару минут я был в состоянии загрузить рекорд:

  1. (load-file <file name>)
  2. (import 'testing.testing.Something)

Я имею в виду, конечно, есть лучший способ, чем это ...:/Я просто хочу загрузить все. С другой стороны, я могу использовать методы протокола, которые записывает запись.

+0

Вы хотите 'load-file'? https://clojuredocs.org/clojure.core/load-file – Kevin

+0

@Kevin добавил изменения. – Peres

ответ

1

Вы пытались использовать функцию удобства, которая автоматически определяется для создания записей? В этом примере это будет (->Something 0).

(Something. 0) использует конструктор Java, который требует импорта класса Java отдельно. Класс Java создается автоматически, когда вы определяете запись, чтобы позволить Java взаимодействовать с вещами, которые вы определили в Clojure.

Использование синтаксиса (->Something 0) - правильный путь и должно быть возможно после вас (use 'testing.testing :reload).

Редактировать Учитывая вышесказанное, похоже, не поможет, вот некоторые инструкции шаг за шагом, чтобы получить минимальный рабочий пример

  1. У вас есть каталог приложений testing созданный с lein new app testing
  2. В testing/src/testing создании testing.clj, содержащий следующие две строки

    (ns testing.testing) 
    (defrecord Something [n]) 
    
  3. Запуск lein repl из вашей директории проекта
  4. Используйте пространство имен с (use 'testing.testing :reload)
  5. (:n (->Something 42)) создаст экземпляр Something и извлекать значение его n элемента - в данном случае 42.
+0

'CompilerException java.lang.RuntimeException: Невозможно разрешить символ: -> Что-то в этом контексте' – Peres

Смежные вопросы