Вопрос

Перемещение http://www.assembla.com/spaces/clojure/wiki/datatypes

Я должен быть в состоянии ввести следующее в ответ Lein:

(DECTYPE BAR [ABCDE])

(Def B (бар 1 2 3 4 5))

Однако, когда я сделаю, я получаю следующий вывод:

java.lang.exception: ожидание var, но полоса отображается с классом user.bar (no_source_file: 31)

Я в замешательстве, и я полностью новичок в Clojure, вся помощь ценится!

Примечание: попробовал тот же код в стандартной Clojure Repl и получите одинаковую проблему.

Ответ: Ну, я ответил на свой собственный вопрос с небольшим дополнительным поиском. Оказывается, образец был плохим. Правильный способ создания бара был бы:

(def B (бар. 1 2 3 4 5))

А В конце бара в этом использовании важно. Все еще не совсем понимает, почему (так что вы, эксперты, пожалуйста, уточните, если у вас есть время, так как я хотел бы узнать детали;)).

Спасибо всем!

Это было полезно?

Решение

Я не так знаком с deftype, но из того, что я вижу, вам нужна точка для создания экземпляра типа, попробуйте:

(deftype Bar [a b c d e])

(def b (Bar. 1 2 3 4 5))

Обратите внимание, это не Bar, но Bar.. Анкет Смотрите примеры, например, здесь:

Этот поток, кажется, указывает на это было изменение в deftype:

Или, чтобы поставить его наоборот, документы на странице, которые вы ссылаетесь, кажутся устаревшими.

Надеюсь это поможет.

Другие советы

Есть два способа достижения того, что вы пытаетесь сделать. Во -первых, давайте пойдем через deftype пример.

user=> (deftype Bar [a b c d e])
user.Bar
user=> (def b (Bar. 1 2 3 4 5))
#'user/b
user=> (:a b)
nil
user=> (.a b)
1

Вы заметите несколько вещей, здесь. Как было упомянуто, вам нужен «». Чтобы создать ваш тип. Кроме того, вы не получаете доступ к ключевым словам (":" обозначения), только доступ (опять же, с ".").

Другой метод - это определение записи с defrecord:

user=> (defrecord Bar [a b c d e])
user.Bar
user=> (def b (Bar. 1 3 5 7 9))
#'user/b
user=> (:a b)
1
user=> (.a b)
1

Это дает вам поле для поля и ключевых слов. Этот доступ легко внесен, если вы решите, что одна из ваших полей содержит еще одну запись.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top