**复现**
{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 Invalid token: ::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 之外