验证nil的方法参数

时间:2014-07-21 12:13:41

标签: ruby validation null

我在方法声明后显示了一个带有验证的Java方法:

public Integer executeComputation(Integer a, Integer b) {
   Validate.notNull(a);
   Validate.notNull(b);
   Validate.isTrue(b != 0);
   return a/b;
}

将此方法调用转换为ruby代码是一个好习惯,如下所示:

def execute_computation(a,b)
  raise 'a is nil' if a.nil?
  raise 'b is nil' if b.nil?
  raise 'zero division' if b == 0
  a/b
end

这是一个微不足道的例子,但我觉得对于Ruby来说它太健谈了。然而,我常常用Java中的公共方法检查我的参数,以防止一些难以发现的NPE。

有人可以解释Ruby中的参数验证是如何工作的吗?理想情况下,一些文献参考。

3 个答案:

答案 0 :(得分:1)

最好快速失败。仅当您有一些要满足的强限制时才检查类型。除了运行时,还会抛出异常。

答案 1 :(得分:1)

Ruby是一种鸭子类型的语言。 Java不是。 Confident Ruby代码不会检查参数的类型。如果你必须检查类型,这是一种气味。验证应该是值,而不是类型。

如何处理运行时异常NoMethodError: undefined method '/' for nil:NilClass和/或TypeError: nil can't be coerced into Fixnum和/或ZeroDivisionError: divided by 0

答案 2 :(得分:1)

如果你觉得你需要进行价值验证并且过于健谈,那就使用一个让你不那么健谈的模块,就像你的公共模块那样。

module Validate
  def self.not_zero val
    raise ArgumentError, 'arg is zero' if val == 0 
  end
end

def execute_computation(a,b)
  Validate.not_zero b
  a/b
end