语法检查或"编译"Ruby on Rails应用程序

Chr*_*s C 6 ruby compilation ruby-on-rails syntax-checking

我是Ruby的新手,最近遇到了一个与创建Ruby on Rails应用程序时的值相比较的问题.在控制器中,我有以下语句总是返回false:

if (user.id != params[:id])
Run Code Online (Sandbox Code Playgroud)

问题是user.id(它是一个Active Record)是一个整数,params [:id]是一个字符串.我花了一段时间来弄清楚这一点,最后我把它改为:

if (user.id != params[:id].to_i)
Run Code Online (Sandbox Code Playgroud)

现在该声明按预期工作.

为了避免将来出现这种错误,有没有办法"编译"或让Ruby在你尝试比较2种不同的类型时发出警告?我遇到的其他一些我想要"编译检查"的问题是:

  • 如果我创建变量但不使用它,请警告我.帮助检查变量名称中的拼写错误.
  • 确保一个方法存在于一个类中,这样我就可以避免方法名称拼写错误,也可以帮助重构,例如,如果我重命名一个方法.

我目前正在Windows上使用带有Rails 2.3.2和RadRails IDE的Ruby 1.8.6-27 RC2.

Ben*_*hes 5

首先测试,然后测试代码.如果编写涵盖应用程序所有分支的测试,则可以确保代码运行并产生正确的结果.

编辑:我应该指出,比较两种类型的能力,不依赖于方法名称直到最后一秒,等等是Ruby的核心功能.

您不会像向对象发送消息那样调用方法.然后,该对象负责确定如何处理该方法.在Rails中,这用于访问ActiveRecord中的DB列.在将具有列名称的消息发送到对象之前,没有列的方法.

Ruby中的静态类型违反了duck typing系统.人们通常可以免费获得多态性,而不必担心复杂的继承/接口方案.

我建议采用这些功能并通过测试来弥补不确定性


Chr*_*s C 0

我发现的最佳解决方案是一个可以进行即时语法检查的 IDE,例如 RubyMine。我不确定它是否能解决我原来的问题,但它帮助我找到并修复了其他几个语法和编译错误。谢谢大家的建议。