Почему 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 преобразуются в двойные:

Другие вопросы по тегам