我编写的大部分代码都是用 Ruby 编写的,而且每隔一段时间,我就会犯一些错字,但过一会儿就会被抓住。当我的脚本运行长任务时,这很烦人,然后返回发现我有错字。
是否有积极开发的 Ruby lint 工具可以帮助我克服这个问题?是否可以在处理大量源文件的系统中使用它,其中一些是动态加载的?
以这个片段为例:
a = 20
b = 30
puts c
要赢得赏金,请向我展示一个工具,该工具将检测c
变量为未创建/未定义。
我编写的大部分代码都是用 Ruby 编写的,而且每隔一段时间,我就会犯一些错字,但过一会儿就会被抓住。当我的脚本运行长任务时,这很烦人,然后返回发现我有错字。
是否有积极开发的 Ruby lint 工具可以帮助我克服这个问题?是否可以在处理大量源文件的系统中使用它,其中一些是动态加载的?
以这个片段为例:
a = 20
b = 30
puts c
要赢得赏金,请向我展示一个工具,该工具将检测c
变量为未创建/未定义。
RubyMine ( http://www.jetbrains.com/ruby ) 可以解决问题:
替代文字 http://img707.imageshack.us/img707/5688/31911448.png
以下都不会完成 RubyMine 所做的所有分析。
每一个都能够识别语法错误,例如错误的括号数量、过多的 def、结束、大括号等。但是没有一个能够像 RubyMine 那样识别无效的方法调用。
原因如下:这很困难。
由于 Ruby 非常动态(并且可以很容易地动态生成像“c”这样的方法),任何试图识别不存在的变量/方法的编辑器都需要加载整个环境的很大一部分和多个程序流路径不断测试以获得准确的“有效性”结果。这比在几乎所有编程都是静态的 Java 中要困难得多(至少在我丢掉那顶帽子的时候)。
这种轻松地动态生成方法的能力是社区对测试如此推崇的原因之一。我真的建议您也尝试测试。
Test::Unit
好的,我知道您已经知道这一点,并且在某种意义上这是一个无用的答案,但是您确实提出了鸭子打字的负面后果,即(此时)没有办法只编写更多测试比 Java 可能需要的东西。
因此,作为记录,请参阅Test::Unit
Ruby 标准库或其他测试框架之一。
拥有可以运行和重新运行的单元测试是捕获错误的最佳方法,并且您确实需要在 Ruby 等动态语言中使用更多的单元测试(测试,而不是错误 :-)...
nitpick可能是您正在寻找的东西。
使用此代码:
class MyString < String
def awesome
self.gsub("e", "3").gsub("l", "1").uppercase
end
end
puts MyString.new("leet").awesome
...它输出:
$ nitpick misspelling.rb
*** Nitpick had trouble loading "misspelling.rb":
NoMethodError undefined method `uppercase' for "133t":MyString
Nothing to report boss! He's clean!
Pelusa很好,但只在 rubinius 中工作。不过,对于熟悉 RVM 的人来说,这不应该是一个问题。
avdi@lazarus:~$ irb
>> a = 20
=> 20
>> b = 30
=> 30
>> puts c
NameError: undefined local variable or method `c' for main:Object
from (irb):3
>>
好了,该工具称为“ IRB”。我得到赏金了吗?
我只是半开玩笑。我写了第二个答案,希望能在 Ruby 中明白这一点,如果你想知道是否定义了某些东西,你必须运行代码。