可能有些事情我真的不明白core.typed和您需要调用check-ns的方式。使用Clojure强制命名空间重载core.typed
这里是什么工作,然后有什么不工作:
lein new default showso
- 空空的Emacs
- 添加
[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)
苹果酒插孔式
- REPL>(NS showso.core)
- 苹果酒-EVAL-缓冲器
showsho.core>(检查纳秒)
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")
现在,不管我怎么努力:苹果酒-EVAL-缓冲,苹果酒-EVAL-最后表达,直接从REPL重新定义somevar
等明显没有我这样做使得check-ns
采取改变考虑到。
就好像上一次check-ns的结果被缓存在某处并且从不重新运行。
即使我杀死所有苹果酒Emacs缓冲区并重新启动苹果酒插孔,这些更改仍未考虑在内。检查ns一直告诉我一切正常。
我可以让check-ns把变化考虑进去的唯一方法是完全关闭Emacs并重新启动它。
请注意,这是完全一样的,如果我有一个假值第一次测试:再检查-NS正确查找类型不匹配(“预期:java.lang.Number中” ...),但是,如果我解决它除了重新启动Emacs以使check-ns
报告没有错误之外,没有办法。
我在做什么错?是否有缓存的前值?
是否有一种简单的方法可以直接从Emacs中强制检查ns,而不必启动新的REPL(在我的情况下甚至不足)或重新启动Emacs?