首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Clojure Repl中重新编译函数会导致编译器警告

在Clojure Repl中重新编译函数会导致编译器警告
EN

Stack Overflow用户
提问于 2017-10-19 14:13:56
回答 2查看 115关注 0票数 0

我似乎不知道使用figwheellein-autoreload的REPL的一些重要方面。

如果我使用上述插件之一启动REPL并对其中一个项目文件进行更改,通常会收到编译器警告。通常,这意味着我必须重新启动REPL,这违背了这些插件的全部目的。

让我给你举个例子。我有三个文件:core.cljsdemoscene.cljsobjects.cljs。它们按照我提到的顺序相互引用,例如使用(:require [ns.demoscene :as demoscene])。我的主要功能是core.cljs

我使用lein figwheel启动了一个小程序,启动了浏览器,一切都很好。

如果我在objects.cljs中编辑一个函数并保存更改,我会得到一个编译器警告:

代码语言:javascript
复制
Compile Warning src/cljs/ns/demoscene.cljs
update already refers to: cljs.core/update being replaced by: ns.demoscene/update

这在不止一个层面上是很奇怪的:

  1. 我没有编辑demoscene.cljs
  2. 为什么cljs.core/update应该被ns.demoscene/update取代?
  3. 如果我重新加载网站(我没有重新启动配置会话),一切都很好。我的更改是适用的,等等。

你能告诉我背景里发生了什么吗?我还有什么好理解的呢?我要怎么做才能避免这些警告?

如果你需要更多的资源,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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])

票数 4
EN

Stack Overflow用户

发布于 2017-10-19 15:11:08

Taylor是正确的,但我想补充一点,在实践中,我发现隐藏核心函数是个坏主意。它往往会导致相当一部分的时间浪费,当你:

  1. 做了这个
  2. 忘了你做了那件事(可能一小时后,可能几个月后,甚至可能不是你)
  3. 尝试在文件的另一部分中使用核心函数
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46832014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档