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