как работать с коллекциями, реализующими IReduceInit - PullRequest
2 голосов
/ 08 октября 2019

Функция plan в next.jdbc возвращает коллекции, которые реализуют IReduceInit, что это значит? Попытка обернуть это вокруг головы, в чем разница между регулярной коллекцией и последующим применением к ней преобразователей, а не с помощью coll, который реализует описанный выше интерфейс.

Кроме того, как вы работаете с coll, который реализует вышеупомянутый интерфейс, не могу найти какой-либо материал на нем.

В приведенном ниже коде -

(def results (jdbc/plan @datasource2 ["select * from cabs"]))

(into [] (map :name) results) => ["a", "b"]

(into [] (map identity) results) => gives an error - [..... missing `map` or `reduce` {row}]

Почему первый датчик работает, а второй выходит из строя?

1 Ответ

1 голос
/ 08 октября 2019

identity просто возвращает свой аргумент, не касаясь его, поэтому (map identity) не "касается" строк и не реализуется.

jdbc/plan требует, чтобы каждая строка была "затронута" либовыберите из него элементы (которые не реализуют структуру данных Clojure, они просто извлекают поля из текущей строки базового ResultSet) или для принудительной реализации с помощью различных операций хэш-карты: assoc, cons (которые неявнозвонки seq), dissoc, iterator, seq и т. д.

Это касается не только коллекций, а IReduceInit - jdbc/plan добавляет дополнительный слой, который является «ленивым». "представление текущей строки базового изменяемого ResultSet объекта.

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