Почему Incanter возвращает число вместо последовательности, когда результат равен одному значению?
У меня возникла проблема, которая может быть сведена к следующей проблеме: Когда результатом запроса является одно значение, sel / $
возвращает число, если оно больше одного значения, это последовательность:
(with-data (to-dataset [[1 2] [3 4]])
($ :col-1))
дает (2 4), но
(with-data (to-dataset [[1 2]])
($ :col-1))
дает 2.
Я хотел бы, чтобы это была последовательность во все времена, так как я хочу, например, применить + к последовательности. Я хочу избежать проверки типа с помощью (seq?). Есть идеи? Разумно ли такое поведение Инкантера?
Это мой обходной путь:
(let [seq-it (fn [a] (if (seq? a) a (list a)))]
(with-data (to-dataset [[1 2]])
(->> ($ :col-1)
(seq-it))))
что дает (2).
1 ответ
Решение
Я считаю, что это ошибка в Incanter (или вы могли бы расценить это как серьезный недостаток дизайна, который следует исправить).
Вероятно, это связано с проблемой, обсуждаемой здесь, где результаты матрицы 1x1 преобразуются в двойные: