我似乎不知道使用figwheel或lein-autoreload的REPL的一些重要方面。
如果我使用上述插件之一启动REPL并对其中一个项目文件进行更改,通常会收到编译器警告。通常,这意味着我必须重新启动REPL,这违背了这些插件的全部目的。
让我给你举个例子。我有三个文件:core.cljs、demoscene.cljs和objects.cljs。它们按照我提到的顺序相互引用,例如使用(:require [ns.demoscene :as demoscene])。我的主要功能是core.cljs。
我使用lein figwheel启动了一个小程序,启动了浏览器,一切都很好。
如果我在objects.cljs中编辑一个函数并保存更改,我会得到一个编译器警告:
Compile Warning src/cljs/ns/demoscene.cljs
update already refers to: cljs.core/update being replaced by: ns.demoscene/update这在不止一个层面上是很奇怪的:
demoscene.cljscljs.core/update应该被ns.demoscene/update取代?你能告诉我背景里发生了什么吗?我还有什么好理解的呢?我要怎么做才能避免这些警告?
如果你需要更多的资源,请告诉我。
发布于 2017-10-19 14:29:43
我没有编辑
demoscene.cljs
我认为这可能被重新加载,因为它是您编辑的文件:core.cljs所必需的。
为什么
cljs.core/update应该被ns.demoscene/update取代?
每当您定义一个与core命名空间函数同名的函数时,您都会看到这个警告,因为这些core函数在名称空间中总是可用的。警告告诉您在名称空间中对update的任何调用都不是cljs.core/update;它将是您在名称空间中定义的update函数。您可以显式地排除您想要在名称空间中“阴影”的任何core函数,例如(:refer-clojure :exclude [update])
发布于 2017-10-19 15:11:08
Taylor是正确的,但我想补充一点,在实践中,我发现隐藏核心函数是个坏主意。它往往会导致相当一部分的时间浪费,当你:
https://stackoverflow.com/questions/46832014
复制相似问题