用 Clojurescript 编写 "cheating" 蒯因

Writing a "cheating" Quine in Clojurescript

假设我们想用 clojure 写一个作弊的 quine,我们可以这样做:

(ns cheating-quine)
... stuff here doesn't really matter ...
(println (slurp *file*))

现在,这在 Lein Figwheel 中不起作用,因为 file 的值最终类似于 /tmp/form-init########.clj,并包含某种引导代码。

问题:我们如何让这个 "cheating" quine 在 clojurescript 中工作?

注意:目标不是写一个 quine。目标是编写一个 cljs 程序,它 可以访问它在 中定义的文件。整个 "cheating quine" 事情试图比我之前失败的

尝试更好地解释问题

一种作弊的解决方案是分发源代码(例如将其放在资源中并作为文件提供)并编译一个 bootstrap 来加载和执行代码,并让它下载你的文件,并在文件中加载相同的文件...这样它就可以对当前 运行 的代码执行 HTTP 请求并执行它。这本质上就是 http://clojurescript.io/ 等 ClojureScript 浏览器 REPL 的工作方式……它们即时编译和执行传入的代码。 clojuresript.io 是 ClojureScript 的一个很好的工作示例 bootstrapping 如果您对它感兴趣,但请注意,有很多事情正在发生,所以希望投入相当多的时间:)