2024 状态 Clojure 调查!中分享你的想法。

欢迎!请参阅关于页面了解更多此网站的工作方式。

+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 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 之外

1回答

0
...