2009-05-06 19 views

回答

48

的關鍵區別在於Object#type已被棄用。來自RDoc的對象#類型:

已棄用的Object#類的同義詞。

這也是爲什麼你應該使用Object#class

返回該類obj的,現在 優於對象#類型,作爲 對象在Ruby的類型只是鬆散 綁到該對象上課。這個 方法必須總是用 顯式接收器調用,因爲類也是Ruby中的保留字 。

實際上,您可能希望使用Object#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

如果它是一個同義詞,爲什麼我會在我定義自己的類上調用類型時遇到未定義的方法錯誤?但是當我爲同一個類調用類方法時,不會發生同樣的事情。未定義的方法錯誤聽起來不像你會得到一個棄用的方法。 – 2009-05-06 19:48:53

+0

你在Ruby 1.9上嗎?在紅寶石1.8我沒有得到一個錯誤,只是一個關於棄用的警告。 – kch 2009-05-06 19:50:56