2011-10-03 99 views
6

這是如何工作的?當運行以下內容時,會打印兩次"hi from class"。紅寶石內部發生了什麼事情,使其表現如此?我不是其實做一個實例方法類class Class - instance與類方法

class Class 
    def foo 
    puts "hi from class" 
    end 
end 

Class.foo 
x = Class.new 
x.foo 

回答

9

我不知道你是否已經意識到這一點,但是當你做class Class ... end,你不創建一個新的類名爲Class,你」重新開放現有班級Class

由於Class是所有類都是實例的類,這意味着Class是它自己的一個實例。正因爲如此,你可以直接在Class上調用任何實例方法Class,就像你在任何其他類上的方式一樣。

+0

那麼當(在'class Class'體內)發生了什麼''def self.foo; 「來自**自己的**」**;結束;'...現在語句'Class.foo'打印'hi從自己'? – slindsey3000

+0

@ slindsey3000:如果你在'Class'中定義了一個實例方法和一個類方法,那麼'Class.foo'將調用類方法,'AnyOtherClass.foo'將調用實例方法。所以在你的例子中,'Class.foo'將會打印'hi from ** self **',例如'String.foo'將會打印'hi from class'。 – sepp2k