在Ruby中引发“NullPointerException”

时间:2009-07-10 00:42:50

标签: java ruby

我以前在Java上工作过很多,现在我正在使用Ruby。我无法弄清楚的一件事是什么是相当于Java“NullPointerException”的ruby?我想在输入函数时测试变量,如果它们是nil我想提出这种类型的异常。是否有特定的ruby错误类来引发此类异常?

3 个答案:

答案 0 :(得分:8)

引发ArgumentError可能适合您的情况。你可以这样做:

def i_dont_take_nils_from_nobody x
  raise ArgumentError.new "You gave me a nil!" if x.nil?
  puts "thanks for the #{x}"
end

i_dont_take_nils_from_nobody nil
 #=> ArgumentError: You gave me a nil!
i_dont_take_nils_from_nobody 1
 #=> thanks for the 1

答案 1 :(得分:5)

例外列表不包含此类内容。

nil是一个对象,可以检查项目以确保它们不是零。

result = Base.find(blah)
result.nil?

在nil上调用nil(对象)没有的方法应该会给你一个NoMethodError异常。

result = Base.find(blah) #returning no result
result.my_advanced_functionality(42)

由于结果为nil,并且nil对象没有定义my_advanced_functionality函数,因此你会得到一个NoMethodError

我所学到的其中一件事就是“你在nil上错误地称为id,这将是4”(因为nil的对象id为4)

异常heirarchy有一个ArgumentError异常,我从未使用过,但看起来它可能会为你服务。

答案 2 :(得分:2)

ruby​​中没有空指针,但如果需要,仍然可以引发异常:

>> class NullPointerException < Exception; end
=> nil
>> raise NullPointerException
NullPointerException: NullPointerException
    from (irb):2