Не могу вернуть набор - PullRequest
       3

Не могу вернуть набор

1 голос
/ 30 апреля 2019

Я пытаюсь получить набор из этого кода, но получаю исключение:

Execution error (ClassCastException) at user/get-non-friends-set (form-init1338839880564085393.clj:7).
clojure.core$set cannot be cast to clojure.lang.IPersistentCollection

Вот мой код:

    (defn get-non-friends-set [id]
      (let [non-friends set]
        (doseq [i (get-friends-set id)]
          (doseq [j (get-friends-set i)]
            (if (and (false? (is-friend? j id))
                     (false? (is-privacy-on? j)))
              (conj non-friends j)
              non-friends)))))

Логика работает, если я заменю (conj non-friends j) на (println j), я получаю ожидаемый вывод (j), но мне нужна функция для возврата набора.

1 Ответ

2 голосов
/ 30 апреля 2019

Вы пытаетесь вернуть функцию вместо вызова функции и возврата результата.Вам нужно (hash-set) вместо set - обратите внимание на паренсы и изменение имени.

Однако часто проще и короче просто написать буквальный пустой набор как #{} вместо вызова функции:

(let [non-friends #{} ] 
   ...)

против

(let [non-friends (hash-set) ] 
   ...)

Однако у вас есть другая проблема: ваши 2 doseq петли всегда будут возвращать nil.Вы, вероятно, хотите использовать функцию filter или filterv.

См.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...