我偶尔会在Clojure中做错,而且我不经常这么做但还不知道我忘记了什么,但我仍然经常这样做,它真的真的烦人
基本上在使用nrepl-jack-in
之后,我经常忘记更改为正确的命名空间。
所以在nrepl user>
提示符下输入一个函数,我得到:
CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo-bar-baz in this context, compiling:(NO_SOURCE_PATH:1)
在给我回nrepl
提示符之前,打印在user>
缓冲区中。
所以我发现,不是试图搞乱Java / Clojure,而是使用一些Emacs魔法,可能有一种直接从Emacs提示的简单方法。
如何添加钩子(?)或类似于Emacs / nrepl-mode的东西,以便在打印特定消息时(例如,包含“无法解析符号”和“在此上下文中”的消息)我可以添加一行代码:
"Didn't you forget to change namespace?"
甚至:
"There's a .clj buffer opened using namespace abc.defk, didn't you forget to enter: (ns abc.def) ?"
在Clojure中我发现有一些错误消息,我觉得这些消息非常神秘,通常需要一段时间来弄清楚我做错了什么。如果我可以直接从Emacs“个性化”这些错误消息,我会赢得相当长的一段时间。
那么我如何“拦截”nrepl输出并根据我的需要定制它们呢?
答案 0 :(得分:1)
您必须在nrepl.el中更改nrepl-default-err-handler
才能达到预期的效果。您可以选择建议(使用defadvice
)nrepl-default-err-handler
来替换其输出(如果它与特定模式匹配)。不过,从nrepl.el这样做对我来说似乎并不是特别好。也许nREPL中间件是一种更好的方法。