对于core.typed以及调用check-ns所需的方式,我可能真的不明白。
这是什么工作,然后什么不起作用:
lein new default showso
[org.clojure/core.typed "0.2.34"]
依赖项添加到 project.clj 修改 core.clj ,使其包含:
(ns showso.core
:require [clojure.core.typed :refer [ann check-ns AnyInteger]]))
(ann somevar Number)
(def somevar 42)
苹果酒插孔式
showsho.core> (检查-NS)
Initializing core.typed ...
"Elapsed time: 2537.589357 msecs"
core.typed initialized.
Start collecting showso.core
Finished collecting showso.core
Collected 1 namespaces in 2595.464317 msecs
Start checking showso.core
Checked showso.core in 20.24605 msecs
Checked 1 namespaces (approx. 5 lines) in 2619.38047 msecs
:ok
所以到目前为止一切顺利,一切正常。
现在我真的根本没有得到的是,如果修改(def somevar 42)
,必须是Number
,比如说String
,那我根本就不能找到一种方法让check-ns
函数考虑到这一变化:
(def somevar "bugsme")
现在,无论我尝试什么:cider-eval-buffer,cider-eval-last-expression,直接从repl重新定义somevar
等等,显然我没做什么让check-ns
接受考虑到了变化。
就好像上次check-ns的结果被缓存到某个地方而从未重新运行。
即使我杀死所有苹果酒Emacs缓冲液并重新启动苹果酒 - 插入,但仍未考虑更改。 check-ns一直告诉我一切正常。
我可以让check-ns考虑更改的唯一方法是完全关闭Emacs并重新启动它。
请注意,如果我首先使用虚假值进行测试,则完全相同:然后check-ns正确地找到类型不匹配(“Expected:java.lang.Number” ...)但是然后如果我修复它,除了重新启动Emacs以使check-ns
报告没有错误之外别无他法。
我做错了什么?是否有一些先前值的缓存?
是否有一种简单的方法可以“强制”check-ns直接从Emacs中考虑更改,而无需启动新的REPL(在我的情况下甚至不够)/重新启动Emacs?
答案 0 :(得分:4)
您应该在每次调用check-ns
之前保存文件。