Clojure 2024 年度调查 中分享您的想法!

欢迎!请查阅 关于我们 页面获取更多关于如何使用本站的信息。

+1
Clojure
**重现**
{code:title=foo.clj|borderStyle=solid}
(ns foo
  (:require [clojure.java.io :as io]))

(defn f [] ::io/key)

{code:title=repl|borderStyle=solid}
Clojure 1.10.0-alpha4
user=> (require 'foo)
nil
user=> (source foo/f)
RuntimeException 无效令牌:::io/key  clojure.lang.Util.runtimeException (Util.java:221)


**问题分析**
{{source}} 调用了 {{read}},没有任何底层绑定或 {{Compiler.currentNS()}}, 这导致别名关键词无法解析。

**可能的解决方案**
在读取前将 \*reader-resolver\* 绑定到以下内容

(reify LispReader$Resolver
  (currentNS [_] 'ignored)
  (resolveClass [_ sym] 'ignored)
  (resolveAlias [_ sym] 'ignored)
  (resolveVar [_ sym] 'ignored))


此外,{{source-fn}} 内部的逻辑可以用 {{read+string}} 简化,除去 CLJ-2358 问题

1 答案

0
参考: https://clojure.atlassian.net/browse/CLJ-2359 (由 gshayban 提出)
...