目前 Clojure 和 ClojureScript 处理形式提供的 :line 和 :column 元数据的方法有所不同。
在 Clojure 中
Clojure 1.11.1
user=> ^{:line 40} (defn foo [])
#'user/foo
user=> (-> #'foo meta :line)
40
而在 ClojureScript 中
ClojureScript 1.11.60
cljs.user=> ^{:line 40} (defn foo [])
#'cljs.user/foo
cljs.user=> (-> #'foo meta :line)
1
我认为这在 ClojureScript 中尤其重要,因为在 ClojureScript 中没有任何方法可以修改 vars 元数据。
例如,当编辑器将形式发送到 repl 时,像编辑器这样的工具可以利用这个机制添加行信息等。保留这些信息很重要,因为像 clojure.repl/source 这样的其他东西依赖于它,目前一旦您从编辑器中评估一个形式,它就会崩溃。
我在这里增加了一个可能的解决方案 https://github.com/clojure/clojurescript/pull/210