问题标签 [cursive]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clojure - 如何在 Clojure 的 Idea Cursive 插件中对文件中的所有表单进行 repl 评估?
有一个“评估表单热键”,所以如果我手动评估文件中的每个顶级表单,我最终会得到我想要的。但我找不到一次评估所有表格的方法。有时形式a
取决于b
哪个取决于c
,手动评估不方便。那可能吗?
intellij-idea - IntelliJ 不包装文档
如您所见,文档没有包装,这使得它们几乎毫无用处。我试过弹窗模式,没什么区别。
我正在使用 IntelliJ Ultimate 2018.1。
PS:我发现了这个已解决的问题https://youtrack.jetbrains.com/issue/IDEA-169414,但似乎无关?
更新 1:我刚刚检查了 Kotlin(并禁用了 Cursive 以获得良好的衡量标准),一些文档仍然没有打包,尽管有些是:
clojure - 如何将profiles.clj 加载到CURSIVE REPL 中?
我的profiles.clj 文件以:
如何在 CURSIVE REPL 中加载它以便能够(:env-name env)
在我的代码中使用?
multithreading - 草书:Clojure 的 *out*、不同的 Writer、多线程时的刷新和排序不一致:这是怎么回事?
tl;dr 为什么 Clojure 会在其中创建一个单独Writer
的线程newFixedThreadPool
?为什么池终止后可能会被刷新?为什么这种行为只能在 Cursive 中重现?
假设我们有一个应用程序在单独的线程中做某事,并且某事写入stdout
. 假设在我们完成所有操作之后,我们想要打印一条最终消息。
我们将遇到的第一件事是 Clojure 的println
,如果提供多个参数,将产生交错输出。这在此处进行了介绍。
但似乎还有另一个问题。如果我们运行这样的事情:
我们有时会有
而有时
也许flush
在每次写入之后?
不工作。有效的方法是在 之上使用显式的 Java 互操作System.out
,如下所示:
制作or也可以writer
。(PrintWriter. System/out)
(OutputStreamWriter. System/out)
似乎我们*out*
的线程中有不同的 s ......确实,
作品。
那么问题来了:为什么会发生这种情况?对于 Java 部分,这是有道理的:System.out
是静态最终的,因此所有线程只存在一个实例,并且一切都与它对话,所以一切都添加到同一个缓冲区。通过打印到 Clojure 的*out*
,主线程和池线程有自己的*out*
,有自己的缓冲区(对于主线程,它是 a PrintWriter
,对于池线程,它是 shared OutputStreamWriter
)。我真的不明白为什么会这样,我也不明白为什么会导致排序不一致:我们在调用最终打印之前明确地完成了所有线程,这应该会导致隐式flush
。但是即使我们添加了一个显式flush
的,结果还是一样的。
我可能在这里遗漏了一些非常明显的细节,如果你能帮助我,我会很高兴。如果您想查看整个可重现的示例,由于篇幅较长,我在此处不包括在内,这里是要点的链接:https ://gist.github.com/trueneu/b8498aa259899a8fc979090fccf632de
编辑:第一个版本的 gist 确实有效,你必须修补它才能打破它,所以我编辑它以从一开始就展示“不正确”的行为。
另外,为了消除任何误解,这里是草书的截图:https ://ibb.co/jHqSL0
EDIT2:这是在原始问题中指出的,但我会强调一下。了解这种行为的要点和机制是问题的一半。*out*
不会为每个线程创建新的。但它似乎为线程池创建了一个单独的线程池。(对于这个输出,减少到 1,并添加tonum-threads
的打印。增加不会产生新的对象地址):(.toString *out*)
safe-println
num-threads
EDIT3:在@glts 评论后map
更改。doseq
此外,当从 运行时lein repl
,它总是产生正确的输出,这让我更加困惑。因此,正如 David Arenas 所指出的,行为似乎取决于上游输出处理。然而,问题仍然存在。
EDIT4:大卫阿里纳斯也在苹果酒中检查了这一点,并且无法重现该行为。似乎它与 Cursive 的 nrepl 输出处理实现有关。
testing - 在每次测试运行之前清除 Cursive REPL 状态
一般来说,我是 Cursive 和 Clojure 的新手,在获得体面的 TDD 工作流程方面遇到了一些困难。
我的问题是后续测试运行取决于 REPL 中的状态。例如,假设您有以下代码。
如果您使用“Tools->REPL->Run tests in current ns in REPL”运行它,它将通过。
如果你然后像这样重构代码
如果你使用“Tools->REPL->Run tests in current ns in REPL”运行它,它仍然会通过(因为sayHello
repl 中仍然存在 def )。但是,测试应该失败,因为代码当前处于失败状态(sayHello
未在代码中的任何地方定义)。
我尝试在 REPL 窗口中切换“将清除本地人”按钮,但这似乎无法解决问题。
如果有一种方法可以在 REPL 之外运行测试(或者在每次测试运行的新 REPL 中),我可以将其作为解决方案。
我想要的只是被测源代码和测试结果之间存在1对1的对应关系。
在此先感谢您的帮助。
java - 如何在intelliJ中运行需要从clojure编译的类的junit测试
我在 Intellij 中使用 Cursive 开发一个 clojure 项目,该项目下面有子项目。我导入了顶级项目,要求导入以递归方式搜索项目。
每个子模块项目都有 clojure 和 java 代码的组合。
要运行模块的所有junit,我可以右键单击并选择运行和所有测试。这会生成一个包含所有已编译 java 类的目标文件夹,但它不会编译 clojure 代码,因此找不到这些类。
有一个 Leiningen 任务将 clojure 代码编译成类文件,但这些文件被放入不同的目标文件夹(与常规 java 类一起)
目标文件夹是配置文件名称的组合。运行 junit 测试时创建的名称是
开发模块名称+基础+系统+用户+提供
运行 lein compile 时的目标文件夹具有所有相同的部分,但顺序不同,
基础+系统+用户+提供+开发模块名称
有没有办法管理运行配置使用的目标文件夹?或者,有没有办法强制在创建目标时使用的配置文件名称的顺序?