2011-08-30 75 views
3

什麼是在下面的代碼從對象創建對象?還是我迷惑

A = Class.new 

class << A 
    def speak 
    puts "Dave" 
    end 
end 

A.speak 
B = A.new 

發生的這怎麼可能什麼是真正發生的事情。什麼是'班'班。當你正在定義一個空類,並給它取名爲A

class A 
end 

回答

4
A = Class.new 

這是類似的。 (注:在Ruby中的約定是,開始以大寫字母標識符是常數。)

class << A 
    def speak 
    puts "Dave" 
    end 
end 

是類似於:

class A 
    def A.speak 
    puts "Dave" 
    end 
end 

在這裏,你是在A定義一個類的方法(而不是一個實例方法)。

線:

A.speak 

被簡單地調用類方法。

最後:

B = A.new 

創造A類的實例,並將其分配給恆B


要回答你的其他問題。 Class是... Class!你可以在irb中看到:

irb(main):022:0> Class.class 
=> Class 
+0

那麼什麼是A?一個對象還是一個類? – pankajdoharey

+0

在Ruby類中也是對象。所以它都是。 – jergason

+0

Jergason是正確的。 'A'是一個類,你也可以說它是一個對象,它的類是'Class',或者它是'Class'類的一個實例。它不是類「A」的一個實例,但是「B」是類「A」的一個實例。此外,'B'本身不是一個階級,而是一個對象。 –