Предупреждение Clojure: "resultset-seq уже существует в clojure.ядро"
Я новичок в Clojure и создаю веб-приложение с использованием Noir framework (очень похоже на Compojure, на самом деле я думаю, что это Compojure с другим уровнем обработчика запросов). Я получаю предупреждение при импорте библиотеки JDBC:
WARNING: resultset-seq already refers to: #'clojure.core/resultset-seq in namespace: webapp.models.database, being replaced by: #'clojure.java.jdbc/resultset-seq
Должен ли я жить с этим предупреждением или есть способ обойти его? Я импортирую библиотеку JDBC, используя:
(use 'clojure.java.jdbc)
3 ответа:
Вы можете избежать этой проблемы, указав точные привязки для импорта:
(use '[clojure.java.jdbc :only [insert-values transaction]]) (transaction (insert-values ...))
Другой вариант-это
:exclude
оскорбляющая привязка:(use '[clojure.java.jdbc :exclude [resultset-seq]]) (transaction (insert-values ...))
Вы также можете просто использовать
require
вместо:(require '[clojure.java.jdbc :as db]) (db/transaction (db/insert-values ...))
Что касается прямой совместимости,
require
, возможно, безопаснее. Использование:only
просто немного менее чистый, но все же довольно хороший подход (и легко исправить, когда он ломается). Исключение в настоящее время нарушающих Привязок, вероятно, является наименее перспективным способом исправления проблема в том, что другие конфликтующие Привязки могут появиться в любое время и отслеживать, что импортируется откуда, может быть сложно.
Есть много вариантов. Это предупреждение означает, что вы заменяете уже определенный символ определением из другого пакета. В этом случае, похоже, что это переменная, которую вы определили, верно? Если это так, то самым простым решением может быть просто переименовать его в коде.
Или если вам не нужен resultset-seq от clojure.Ява.пакет jdbc вы можете исключить его:
(use '[clojure.java.jdbc :exclude (resultset-seq)])
Или еще лучше,
(use '[clojure.java.jdbc :only (f1 f2 f3)])
Где f1, f2, f3-это вещи, которые вы на самом деле необходимость.
(use '[clojure.java.jdbc :as jdbc])
, а затем использовать jdbc / resultset-seq
Или вы можете просто:
(require 'clojure.java.jdbc)
А затем используйте clojure.Ява.jdbc/reusltset-seq