我注意到 Clojure 的 ns 函数有一些奇怪的行为。我认为它并不太关心它的论点的顺序,但显然它可能非常挑剔。
在一个文件中,我有
(ns ^{:doc "Foobar"
:author "me"}
foo.bar)
但如果我把它写成
(ns foo.bar ^{:doc "Foobar"
:author "me"})
我收到以下错误
Exception in thread "main" java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol
在其他文件中,我将 foo.bar 放在 ns 之后,只要元数据不是 ns 的最后一个参数,它就可以正常运行。这有点烦人,因为在其他文件中,我有一些类似 (:require foo.baz) 的东西,显然必须在 foo.bar 之后,否则它会抛出另一个异常。ns的具体规则是什么?我希望我对 ns 的所有调用都是一致的,现在我不知道该怎么做。