Clojure 的 require 函数中的别名不起作用
Alias in Clojure's require function doesn't work
我想使用 clojure.java.jdbc 来 运行 一些 sql 查询。 repl 给了我 CompilerException java.lang.RuntimeException: No such namespace: jdbc
代码和异常是
(require `[clojure.java.jdbc :as jdbc])
(def db-spec {:classname "com.mysql.jdbc.Driver" :subprotocol "mysql" :subname "//localhost:3306/foo" :user "root" :password "1234"})
(jdbc/query db-spec ["select * from client"])
=> nil
=> #'gaga.core/db-spec
CompilerException java.lang.RuntimeException: No such namespace: jdbc, compiling: (C:\Users\User\.IdeaIC14\system\tmp\form-init1177514063701175563.clj:3:1)
在我看来,require 函数中的别名定义不起作用。如果我使用全名 clojure.java.jdbc 替换上面代码中的 jdbc 别名,一切似乎都有效:
(require `[clojure.java.jdbc :as jdbc])
(def db-spec {:classname "com.mysql.jdbc.Driver" :subprotocol "mysql" :subname "//localhost:3306/foo" :user "root" :password "1234"})
(clojure.java.jdbc/query db-spec ["select * from client"])
=> nil
=> #'gaga.core/db-spec
=> ({:birthday #inst "1990-09-08T14:00:00.000-00:00", :gender 0, :addressid 1, :mobile "13890879283", :idnum "31090818790987", :idtype 0, :name "xiaomao", :version 0, :id 1})
我的project.cli低于
(defproject gaga "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"] [org.clojure/java.jdbc "0.3.6"] [mysql/mysql-connector-java "5.1.35"]]
:main ^:skip-aot gaga.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}})
有人知道原因吗?
所以基本上我测试了它在 require 中的语法错误
你必须使用
(require '[clojure.java.jdbc :as jdbc])
表示使用 '(Apostrophe) 而不是 `(Acute)
我想使用 clojure.java.jdbc 来 运行 一些 sql 查询。 repl 给了我 CompilerException java.lang.RuntimeException: No such namespace: jdbc
代码和异常是
(require `[clojure.java.jdbc :as jdbc])
(def db-spec {:classname "com.mysql.jdbc.Driver" :subprotocol "mysql" :subname "//localhost:3306/foo" :user "root" :password "1234"})
(jdbc/query db-spec ["select * from client"])
=> nil
=> #'gaga.core/db-spec
CompilerException java.lang.RuntimeException: No such namespace: jdbc, compiling: (C:\Users\User\.IdeaIC14\system\tmp\form-init1177514063701175563.clj:3:1)
在我看来,require 函数中的别名定义不起作用。如果我使用全名 clojure.java.jdbc 替换上面代码中的 jdbc 别名,一切似乎都有效:
(require `[clojure.java.jdbc :as jdbc])
(def db-spec {:classname "com.mysql.jdbc.Driver" :subprotocol "mysql" :subname "//localhost:3306/foo" :user "root" :password "1234"})
(clojure.java.jdbc/query db-spec ["select * from client"])
=> nil
=> #'gaga.core/db-spec
=> ({:birthday #inst "1990-09-08T14:00:00.000-00:00", :gender 0, :addressid 1, :mobile "13890879283", :idnum "31090818790987", :idtype 0, :name "xiaomao", :version 0, :id 1})
我的project.cli低于
(defproject gaga "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"] [org.clojure/java.jdbc "0.3.6"] [mysql/mysql-connector-java "5.1.35"]]
:main ^:skip-aot gaga.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}})
有人知道原因吗?
所以基本上我测试了它在 require 中的语法错误 你必须使用
(require '[clojure.java.jdbc :as jdbc])
表示使用 '(Apostrophe) 而不是 `(Acute)