2009-05-06 12 views
40

Rubyのクラスメソッドとタイプメソッドの違いは何ですか?私はそのタイプがいくつかのクラスのタイプを見つけるために働くのに気付きましたが、他のクラスは見つけられませんでした。Rubyのclass()とtype()の比較

答えて

48

重要な違いは、Object#typeは推奨されていません。オブジェクト#タイプのRDocから:

Object#classの非推奨同義語。

あなたがObject#classを使うべき理由はここにあります:Rubyで オブジェクトの型だけ緩く、そのオブジェクトに関連付けられ あるよう

は、オブジェクト#型好ま今 、OBJのクラスを返します。クラス。この メソッドは、明示的受信者 で呼び出される必要があります。クラスはRubyの 予約語です。

実際には、多くの場合、オブジェクトのクラスを確認する代わりにObject#respond_to?を使用することをお勧めします。

+0

同義語の場合、自分で定義したクラスで型を呼び出すと、定義されていないメソッドエラーが発生するのはなぜですか?同じクラスのクラスメソッドを呼び出すと、同じことは起こりません。未定義のメソッドエラーは、非推奨のメソッドの場合のようには聞こえません。 –

+0

@Chris Collins私の推測では、ドキュメントはオフであり、厳密な同義語ではないということです。 PointはObject#typeが使用されていないメソッドであることが変わりません。 – runako

+4

なぜrespond_toを使用しますか? –

15

#type#classの同義語ですが、それはruby 1.8では廃止されており、明らかにruby 1.9から消えています。どこでも#classを使用してください。

 

# For ruby 1.8 

$ ri Object#type 
------------------------------------------------------------ Object#type 
    obj.type => class 
------------------------------------------------------------------------ 
    Deprecated synonym for Object#class. 


# For ruby 1.9 

$ ri1.9 Object#type 
Nothing known about Object#type 
+0

同義語の場合、定義したクラスで型を呼び出すと、定義されていないメソッドエラーが発生するのはなぜですか?同じクラスのクラスメソッドを呼び出すと、同じことは起こりません。未定義のメソッドエラーは、非推奨のメソッドの場合のようには聞こえません。 –

+0

あなたはルビー1.9ですか? Ruby 1.8では、私はエラーが出ることはありませんが、非推奨についての警告です。 – kch

+0

そして、もしあなたがruby 1.9を使っているのであれば、deprecationはいつでも削除されることを意味し、1.9のように見えます。 – kch

関連する問題