我编写的大多数代码都是在Ruby中,每隔一段时间,我会做一些错字,只会在一段时间后被捕获.当我的脚本运行很长的任务时,这很烦人,并返回发现我有一个错字.
是否有一个积极开发的Ruby工具lint工具可以帮助我克服这个问题?是否可以在一个使用大量源文件的系统中使用它,其中一些是动态加载的?
以此片段为例:
a = 20 b = 30 puts c
要获得赏金,请告诉我一个工具,它将检测c
变量为未创建/未定义.
ruby -c myfile.rb
将检查正确的Ruby语法.
Reek检查Ruby代码以查找常见的代码味道.
Roodi检查Ruby代码以解决常见的面向对象设计问题.
Flog可以警告您异常复杂的代码.
[Plug]如果您的项目位于公共Github存储库中,则每次提交时,Caliper都可以在您的代码上运行后三个工具和其他工具.(免责声明:我在Caliper工作)
您可以尝试使用Diamondback Ruby.它执行Ruby代码的静态类型检查,因此会责怪您使用未定义的变量.
虽然DRuby是一个正在进行的研究项目,但它已经适用于小型,自包含的Ruby脚本.目前,它无法分析大量的Ruby标准库"开箱即用".目前他们正在努力键入Ruby on Rails(参见他们最近的论文).
RubyMine(http://www.jetbrains.com/ruby)可以解决这个问题:
alt text http://img707.imageshack.us/img707/5688/31911448.png
以下所有内容都不会完成RubyMine的所有分析.
NetBeans Ruby包
Aptana RadRails
gVIM(通过scrooloose合成插件)
这些中的每一个都有能力识别语法错误,例如错误的括号,太多的defs,end,braces等.但是没有人会像RubyMine那样识别无效的方法调用.
原因如下:这很难.
由于Ruby非常动态(像'c'这样的方法可以很容易地生成),任何试图识别不存在的变量/方法的编辑器都需要加载整个环境的大部分和多个程序流路径经过不断测试,以获得准确的"有效性"结果.这比几乎所有编程都是静态的Java要困难得多(至少在我放弃那个帽子的时候).
这种轻松生成方法的能力是社区对这种高度尊重进行测试的原因之一.我确实建议您尝试测试.
看看RuboCop.它是一个基于Ruby样式指南的Ruby代码样式检查器.它非常积极地维护并支持所有主要的Ruby实现.它适用于Ruby 1.9和2.0,并且具有出色的Emacs集成.
Test::Unit
好吧,我知道你已经知道了这一点,从某种意义上来说这是一个无用的答案,但是你确实提出了鸭子打字的负面后果,那就是(此时)还没有办法只是写更多的测试比Java可能需要的东西.
因此,有关记录,请参阅Test::Unit
Ruby标准库或其他测试框架之一.
拥有可以运行和重新运行的单元测试是捕获错误的最佳方法,并且在Ruby等动态语言中确实需要更多(测试,而不是错误:-) ...