2009-07-10 13 views
2

以前はJavaで多大な作業をしていましたが、今はRubyにもっと取り組んでいます。私は理解できない1つのことは、Java "NullPointerException"に相当するルビは何ですか?私は関数を入力するときに変数をテストしたいと思います。もしそれらがnilであるなら、このタイプの例外を発生させたいと思います。この種の例外を発生させる特定のルビエラークラスはありますか?Rubyで "NullPointerException"を発生させよ

答えて

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 
5

例外リストにはそのようなものは含まれません。

nilはオブジェクトであり、項目がnilでないことを確認するためにチェックできます。

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

nil(オブジェクト)にないメソッドを呼び出すと、NoMethodError例外が発生するはずです。

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

結果はnilであり、nilのオブジェクトは、関数my_advanced_functionalityを定義していないので、あなたはNoMethodError私が学ぶように私にはかなりの量を見るものの

一つを買ってあげるあなたが誤ってIDと呼ばれるている」でありますnilのオブジェクトIDが4であるため

例外の階層構造には、私が一度も使ったことのないArgumentError例外がありますが、それはあなたに役立つようです。

2

はルビーにNULLポインタはありませんが、あなたがしたい場合、あなたはまだ例外を発生させることができます。

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

1ライナー:raise class NullPointerException <例外>このようなことができます。自己;終わり – klochner

関連する問題