在某些类型的代码中,相对容易在不吹动堆栈的情况下导致无限循环.使用clojure-test测试这种性质的代码时,有没有办法在不重启swank服务器的情况下中止当前运行的测试?
目前我的工作流程涉及到
$ lein swank
Run Code Online (Sandbox Code Playgroud)
使用emacs连接到swank slime-connect,然后切换到测试,执行C-c C-,,测试运行直到无限循环,然后返回,但是一个cpu仍然在测试中流失.我发现阻止这种情况的唯一方法是重新启动lein swank,但似乎这是一个相对常见的问题?谁有更好的解决方案?
想象一下,你有一个可执行文件foo.rb,库bar.rb按以下方式排列:
<root>/bin/foo.rb
<root>/lib/bar.rb
Run Code Online (Sandbox Code Playgroud)
在foo.rb的标题中,您将以下要求放入bar.rb中引入功能:
require File.dirname(__FILE__)+"../lib/bar.rb"
Run Code Online (Sandbox Code Playgroud)
只要对foo.rb的所有调用都是直接的,这就可以正常工作.如果您将$ HOME/project和symlink foo.rb放入$HOME/usr/bin,则解析为__FILE__$HOME/usr/bin/foo.rb,因此无法找到bar.rb与dirname相关的位置foo.rb.
我意识到像rubygems这样的打包系统通过创建一个命名空间来搜索库来解决这个问题,并且还可以使用$:include 来调整load_path $HOME/project/lib,但似乎应该存在一个更简单的解决方案.有没有人有这个问题的经验,并找到了有用的解决方案或食谱?
考虑到键添加到关联列表的频率auto-mode-alist,我认为有一些习惯方法用于维护具有唯一键的关联列表,但尚未遇到它.
假设我执行以下操作:
(setq alist '())
(add-to-list 'alist '(a . 1))
(add-to-list 'alist '(a . 2))
(add-to-list 'alist '(b . 3))
Run Code Online (Sandbox Code Playgroud)
运行之后,alist包含((b . 3) (a . 2) (a . 1)).我看到add-to-list可以选择compare-fn,所以我认为有一些方法我可以传递得到((b . 3) (a . 1))结果.我也知道我可以使用哈希表,但很奇怪如何用关联列表惯用它.